在Kubernetes上執行SAP UI5應用(上)
2018年只剩最後30天了。Jerry在2017年的最後一天,曾經立下一個目標: 這個微信公眾號在2018年保證至少每週釋出一篇SAP原創技術文章 。
從Jerry在後臺統計的2018全年文章數量來看,這個目標已經提前實現了。為了感謝大家的支援,在2018年的最後一天,Jerry會釋出一個合集:《 SAP成都研究院2018年XX篇原創文章合集 》,包含了2018年全年SAP成都研究院的同事們釋出過的文章。
Jerry在11月份中旬去SAP上海研究院參加了Kubernetes的內部培訓(詳情參考我的前一篇文章: 站在巨人肩膀上的牛頓:Kubernetes和SAP Kyma )。在SAP上海研究院的同事們如果想參加這個內部培訓,可以聯絡同事 Yang Katie。
為了避免很快就把三位老師傳授的知識忘得精光,我得給自己找點練習來鞏固所學的東西。
Jerry 2014年底加入SAP CRM Fiori開發團隊時,我們開發的CRM Fiori應用,還是部署在傳統的SAP Netweaver上的,詳情參考我的文章: SAP Fiori應用的三種部署方式 。
後來,我陸續接觸了Salesforce的雲平臺Heroku,也學著很多程式設計師一樣把自己的部落格搭在github上,再後來接觸了SAP自己的雲平臺,自然而然地就會試著把SAP UI5部署到這些平臺上:
現在既然學了Kubernetes,那麼就來試試將SAP UI5應用執行在Kubernetes上面吧。
我用來部署的UI5應用名叫Jerry's Service Order, 是一個典型的Master-Detail風格的應用,左邊Master List是所有服務訂單列表,選中任意一個,在右邊的Detail頁面顯示選中的服務訂單的明細。
這個UI5應用的外觀如上圖所示。為簡單起見,所有顯示的資料都是從專案裡的一個json檔案讀取的,不支援新訂單的建立或修改。該應用可以從我的github獲取:
https://github.com/i042416/jerrylist
如本文標題所示,這個練習的終極目標就是讓該UI5應用執行於Kubernetes上,那麼第一步就是先讓它執行於容器裡。和SAP Kubernetes內部培訓一樣,我選擇了Docker這個非常受歡迎的容器引擎作為這個Kubernetes練習的容器技術。
關於Docker的簡介和安裝介紹,請參閱阮一峰大神的文章: Docker 入門教程
http://www.ruanyifeng.com/blog/2018/02/docker-tutorial.html
為什麼我們要使用Docker容器?下面這段話摘自阮一峰的部落格:
“Docker 屬於 Linux 容器的一種封裝,提供簡單易用的容器使用介面。它是目前最流行的 Linux 容器解決方案。
Docker 將應用程式與該程式的依賴,打包在一個檔案裡面。執行這個檔案,就會生成一個虛擬容器。程式在這個虛擬容器裡執行,就好像在真實的物理機上執行一樣。有了 Docker,就不用擔心環境問題。
總體來說,Docker 的介面相當簡單,使用者可以方便地建立和使用容器,把自己的應用放入容器。容器還可以進行版本管理、複製、分享、修改,就像管理普通的程式碼一樣。”
Jerry梳理了一下將SAP UI5應用執行在Docker容器裡的全過程,總共分三個步驟:
1. 讓UI5應用執行在本地容器內
2. 將包含了UI5應用的本地容器打成一個新映象
3. 將本地映象上傳到Docker hub,再下載測試
下面是詳細步驟。
1. 讓UI5應用執行在本地容器內
如果僅僅只會跑Docker的Hello World(其實Jerry兩週前就是這個水平,囧),拿到這個需求,從什麼地方入手?
當然是從包含了能執行UI5應用的那些web伺服器的映象入手,這裡我選擇了Nginx映象,在Docker hub上有10.4k個stars。
用下面的命令直接執行這個映象:
docker run -it nginx
用 docker ps 拿到例項化的容器id:
然後進入處於執行狀態中的容器,執行shell命令:
docker exec -it bbc5d48a761c /bin/sh
看到#提示符後,進入容器內部的目錄: /usr/share/nginx/html
如果我們能將github上的UI5應用的檔案想辦法拷貝到這個目錄下面,就達到了在本地Docker容器執行UI5應用的目的了。
有很多種辦法可以把github裡的資源下載到Docker容器內部這個指定的目錄下, 這裡Jerry用一種我覺得最簡單的方式,即通過Docker Volume技術將宿主機上的某個目錄A以Volume的方式掛接到容器內部的html資料夾上,這樣我們直接把github倉庫上的webapp資料夾下載到 宿主機的資料夾A 即可,這個資料夾會以Volume的形式自動出現在容器內部對映好的目錄內。
docker run -d -p 1081:80 -v
pwd
/webapp:/usr/share/nginx/html/webapp –name jerry-custom nginx
使用引數-p 1081:80將Nginx服務通過埠1081暴露出來,因此我這次要使用 http://localhost:1081 測試新啟動的容器例項。
再次執行 docker exec 進入docker容器內部,確保 /usr/share/nginx/html 資料夾下確實包含了期望看到的UI5應用。
瀏覽器裡輸入localhost:1081/webapp,確保UI5應用能夠正常訪問,至此這個應用已經在本地docker容器裡成功執行起來了。
2. 將包含了UI5應用的本地容器打成一個新映象
到目前為止這個本地docker例項是沒有辦法給其他人使用的,為此我們得先利用dockerfile製作一個包含了UI5應用的docker映象,上傳到docker hub上,以便其他人下載。
隨便建立一個資料夾,比如jerry-build, 然後把webapp資料夾放進去,再建立一個dockerfile檔案,內容就三行:
**FROM nginx:stable **
**COPY webapp/ /usr/share/nginx/html/webapp/ **
RUN ls -la /usr/share/nginx/html/webapp *
這三個指令從語義上不難理解,第一行FROM命令告訴docker映象構建例程使用nginx的stable版本作為基礎映象進行新映象的構建。第二行COPY命令負責把webapp資料夾下的所有UI5資原始檔拷貝到nginx docker映象的對應目錄內。第三行RUN命名執行shell命令ls,生成新的映象檔案。
dockerfile的詳細語法請參考Docker 官方文件:
https://docs.docker.com/engine/reference/builder/#usage
執行命令 docker build . , 最後一個.代表“當前目錄”。
看到上圖"Successfully built(成功構建)"的輸出資訊後,我們加上引數 -t jerry-nginx-image:1.0 重新構建一個名為jerry-nginx-image的映象:
成功構建後,使用引數-p暴露一個新的埠1082:
docker run -d -p 1082:80 jerry-nginx-image:1.0
現在localhost:1082/webapp也能訪問UI5應用了。
使用**docker images, **現在我們能看到這個構建好的映象了,接下來我們會將其推送到Docker hub上。
3. 將本地映象上傳到Docker hub
Docker hub的使用方式幾乎和github完全一致。說句題外話:雖然github今年6月份被微軟收購了,但是使用者體驗一點也沒變,一如既往的優秀。
關於github更多另類用法,請參閱Jerry的文章: 寫在Github被微軟收購之際 - Github的那些另類用法 。
首先在Docker hub上註冊一個帳號:
建立一個新倉庫:
取名i042416/ui5-nginx:
新建好的空的倉庫看起來是這樣的:
使用 docker ps 得到本地正在執行的docker容器的ID:
使用commit命令提交這個本地容器的修改(類比 git commit ):
docker commit 53de4188b702 i042416/ui5-nginx
現在準備將這個本地提交過後的映象推送到Docker hub了。
執行命令 docker login :
在CloudFoundry上部署應用的朋友們可以把 docker login 類比成 cf login (下面是cf login的截圖):
最後一步就是用 docker push 將本地映象推送到Docker hub:
重新整理Docker hub上新建的倉庫,能觀察到剛才的本地推送記錄和映象尺寸。
現在可以通知您的朋友,在其電腦上消費這個映象了。當然您也可以把自己電腦上的本地映象刪除,再使用 docker run 執行。
在兩種情況下,由於本地映象檢索失敗,我們都將看到提示資訊:Unable to find image ‘i042416/ui5-nginx:latest' locally, 然後觀察到遠端映象的下載過程。
使用1080埠基於映象i042416/ui5-nginx啟動一個新的容器:
localhost:1080/webapp能夠正常工作:
docker inspect 命令證實了這個啟動的容器確實是基於映象i042416/ui5-nginx的。
在這個主題的下半部分,我們將使用這個i042416/ui5-nginx映象,開始我們的Kubernetes之旅。敬請期待。
更多閱讀
要獲取更多Jerry的原創文章,請關注公眾號"汪子熙":
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/24475491/viewspace-2222397/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 如何在阿里雲上執行SAP UI5應用阿里UI
- 高射炮打蚊子,殺雞用絕世好劍:在SAP Kyma上執行UI5應用UI
- 怎樣在 Kubernetes 上執行 PostgreSQLSQL
- 在kubernetes上執行WASM負載ASM負載
- Hummingbird: 在Web上執行Flutter應用WebFlutter
- 在 WASI 上執行 .NET 7 應用程式
- 使用 SAP UI5 CLI 命令列工具構建和執行 SAP UI5 應用UI命令列
- 6個在本地機器上執行 Kubernetes 的工具
- 在 Node.js 上執行 Flutter Web 應用和 APINode.jsFlutterWebAPI
- 在 Mac 上執行 Windows 應用程式,只需一個CrossOver!MacWindowsROS
- Anbox:在 Linux 上執行 Android 應用程式的簡單方式LinuxAndroid
- 如何將 SAP UI5 應用託管到 Github 網站上並執行UIGithub網站
- 如何使用 Chrome 除錯執行在手機上的 SAP UI5 Cordova 混合應用試讀版Chrome除錯UI
- SAP UI5 標準應用的多語言支援 - SAP UI5 執行時語言判定機制UI
- 在NuoDB上執行AsteriskAST
- 在生產中執行kubernetes上的Istio
- 如何在瀏覽器裡開發並執行 SAP UI5 應用瀏覽器UI
- 使用工具分析 SAP UI5 應用前端執行的效能問題UI前端
- Java 應用程式在 Kubernetes 上棘手的記憶體管理Java記憶體
- 如何在桌面電腦端除錯執行在手機上的 SAP UI5 應用試讀版除錯UI
- 最簡單的SAP雲平臺開發教程 - 如何開發UI5應用並執行在SAP雲平臺上UI
- kubernetes執行應用1之Deployment
- 如何在 SAP Business Application Studio 裡建立 SAP UI5 應用並部署到 BTP 平臺上APPUI
- 如何使用iMazing在M1 Mac上執行iOS或iPadOS應用?MaciOSiPad
- 在 SAP 雲平臺上部署和執行 Docker 應用Docker
- 使用SAP BSP應用執行VueVue
- 轉:在Linux上執行WinFormLinuxORM
- Parallels Desktop 19: 實現Windows應用程式在Mac上的無縫執行ParallelWindowsMac
- 如何使用 CrossOver 在 Mac 蘋果電腦上安裝執行 win應用ROSMac蘋果
- 把 SAP UI5 應用部署到 SAP KymaUI
- 如何在 SAP BTP 上 手動執行 workflow
- 一步步把 SAP UI5 應用部署到 SAP BTP Kyma 執行環境中去UI
- 在 SAP BTP 上體驗 SAP HANA Cloud 試用版本Cloud
- 將SAP UI5應用部署在Heroku雲平臺裡UI
- 使用谷歌Skaffold在Kubernetes上進行Spring Boot應用程式的CI / CD工作流程 - foojay谷歌Spring Boot
- Hazelcast JET在Spring Boot上執行ASTSpring Boot
- 在VSCode上執行Python程式(Mac)VSCodePythonMac
- 介紹一個能開發簡單SAP UI5應用的線上IDE:StackBlitzUIIDE