摘要:在上海研究院的同事們如果想參加這個內部培訓,可以聯系同事。第三行命名執行命令,生成新的鏡像文件。說句題外話雖然今年月份被微軟收購了,但是用戶體驗一點也沒變,一如既往的優秀。關于更多另類用法,請參閱的文章寫在被微軟收購之際的那些另類用法。
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部署到這些平臺上:
Step by step to host your UI5 application in?Heroku
Step by step to host your web application to?Github
Deploy your web application to?Cloud Foundry?which can access resource from On-Premise ABAP system
現在既然學了Kubernetes,那么就來試試將SAP UI5應用運行在Kubernetes上面吧。
我用來部署的UI5應用名叫Jerry"s Service Order, 是一個典型的Master-Detail風格的應用,左邊Master List是所有服務訂單列表,選中任意一個,在右邊的Detail頁面顯示選中的服務訂單的明細。
這個UI5應用的外觀如上圖所示。為簡單起見,所有顯示的數據都是從項目里的一個json文件讀取的,不支持新訂單的創建或修改。該應用可以從我的github獲取:
https://github.com/i042416/je...
如本文標題所示,這個練習的終極目標就是讓該UI5應用運行于Kubernetes上,那么第一步就是先讓它運行于容器里。和SAP Kubernetes內部培訓一樣,我選擇了Docker這個非常受歡迎的容器引擎作為這個Kubernetes練習的容器技術。
關于Docker的簡介和安裝介紹,請參閱阮一峰大神的文章:Docker 入門教程
http://www.ruanyifeng.com/blo...
為什么我們要使用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/engin...
執行命令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之旅。敬請期待。
更多閱讀
寫在Github被微軟收購之際 - Github的那些另類用法
SAP Fiori應用的三種部署方式
站在巨人肩膀上的牛頓:Kubernetes和SAP Kyma
要獲取更多Jerry的原創文章,請關注公眾號"汪子熙":
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/33112.html
摘要:在上海研究院的同事們如果想參加這個內部培訓,可以聯系同事。第三行命名執行命令,生成新的鏡像文件。說句題外話雖然今年月份被微軟收購了,但是用戶體驗一點也沒變,一如既往的優秀。關于更多另類用法,請參閱的文章寫在被微軟收購之際的那些另類用法。 2018年只剩最后30天了。Jerry在2017年的最后一天,曾經立下一個目標:這個微信公眾號在2018年保證至少每周發布一篇SAP原創技術文章。 從...
摘要:后面幾個狀態的字段都是,其中是節點上一個重要的模塊,負責維護和管理運行于該節點上的所有容器,確保的運行狀態與使用者期望一致。 上一篇文章?在Kubernetes上運行SAP UI5應用(上),我介紹了如何在Docker里運行一個簡單的SAP UI5應用,并且已經成功地將一個包含了這個UI5應用的docker鏡像上傳到Docker hub上。 這篇文章作為這個主題的下半部分,將會介紹如何...
摘要:后面幾個狀態的字段都是,其中是節點上一個重要的模塊,負責維護和管理運行于該節點上的所有容器,確保的運行狀態與使用者期望一致。 上一篇文章?在Kubernetes上運行SAP UI5應用(上),我介紹了如何在Docker里運行一個簡單的SAP UI5應用,并且已經成功地將一個包含了這個UI5應用的docker鏡像上傳到Docker hub上。 這篇文章作為這個主題的下半部分,將會介紹如何...
摘要:后面幾個狀態的字段都是,其中是節點上一個重要的模塊,負責維護和管理運行于該節點上的所有容器,確保的運行狀態與使用者期望一致。 上一篇文章?在Kubernetes上運行SAP UI5應用(上),我介紹了如何在Docker里運行一個簡單的SAP UI5應用,并且已經成功地將一個包含了這個UI5應用的docker鏡像上傳到Docker hub上。 這篇文章作為這個主題的下半部分,將會介紹如何...
閱讀 1949·2023-04-26 01:59
閱讀 3264·2021-10-11 11:07
閱讀 3295·2021-09-22 15:43
閱讀 3374·2021-09-02 15:21
閱讀 2549·2021-09-01 10:49
閱讀 901·2019-08-29 15:15
閱讀 3089·2019-08-29 13:59
閱讀 2829·2019-08-26 13:36