上一篇,您已經完成了Docker Desktop安裝,並啓用了Kubernetes,接下來就可容器化部署應用程序了。一般,開發工做流包括以下幾點:node
一、首先建立Docker鏡像,爲應用程序的每一個組件建立和測試單個容器。git
二、將容器和所支持的基礎設施組裝成一個完整的應用程序,能夠用Docker stack file或者Kubernetes的YAML來實現。github
三、測試、共享和部署完整的容器化應用程序。docker
在本篇幅中,咱們將集中於此工做流的步驟1:基於現有的容器來建立鏡像。請記住,Docker鏡像捕獲了容器化進程將在其中運行的私有文件系統;咱們須要建立一個鏡像,其中正好包含咱們的應用程序須要運行的內容。shell
容器化開發環境比傳統開發環境更容易設置,一旦您學習瞭如何構建鏡像,咱們將在下面討論。這是由於容器化的開發環境會將應用程序所需的全部依賴項隔離在Docker鏡像中;除了Docker以外,不須要在開發計算機上安裝任何東西(即開發環境的部署僅依賴於Docker鏡像)。這樣,您就能夠輕鬆地爲不一樣的堆棧開發應用程序,而無需更改開發機器上的任何環境。npm
配置json
一、從GitHub克隆用於演示的示例項目。app
git clone -b v1 https://github.com/docker-training/node-bulletin-board
cd node-bulletin-board/bulletin-board-app
這是一個簡單的公告板應用程序,用node.js編寫。在這個例子中,讓咱們假設是您編寫了這個應用程序,如今正試圖將其容器化部署起來,目錄結構如圖1.1所示。ide
圖1.1學習
查看名字爲Dockerfile的文件,Dockerfile文件描述瞭如何爲容器組裝私有的文件系統,而且還包含了一些描述如何基於此鏡像運行容器的元數據。公告板應用程序Dockerfile如圖1.2所示。
圖1.2
容器化部署應用程序的第一步是編寫Dockerfile。您能夠把這些Dockerfile命令看成是一個建立鏡象的步驟。這個步驟以下:
一、使用版本號6.11.5的鏡像做爲本次構建的基礎鏡像。6.11.5基礎鏡像是由node.js官方提供的鏡像
二、指定鏡像文件系統的工做目錄爲/usr/src/app,即每次登陸基於該鏡像建立的容器,目錄會自動切換到/usr/src/app
三、將package.json文件複製到鏡像的當前位置,即/usr/src/app/package.json
四、在鏡像文件系統中運行npm install命令(它將讀取package.json以肯定應用程序的節點依賴關係,並安裝它們)
五、將應用程序的其他源代碼從主機複製到鏡像中。
您能夠看到,這些步驟與您在主機上設置和安裝應用程序時可能採起的步驟大體相同,但使用Dockerfile容許咱們在一個可移植、獨立的Docker鏡像(node.js官方鏡像)再次構建。
上面的步驟爲鏡像構建了文件系統,可是Dockerfile中還有一行,CMD命令行。CMD ["要運行的程序","參數1","參數2"] 是告訴容器啓動時要運行的命令或腳本,Dockerfile中命令告知此鏡像要支持的容器化進程是npm start。
注意:Dockerfile只能有一條CMD命令,若是有多條,則執行最後一條。
一個Dockerfile始終是從FROM命令開始,上述是一個簡單的Dockerfile文件,還有更多的Dockerfile指令,請參閱Dockerfile reference(https://docs.docker.com/engine/reference/builder/)。
構建鏡像並測試
如今咱們有了源代碼和Dockerfile,是時候構建咱們的第一個鏡像了,並確保從該鏡像啓動的容器能按預期工做。
注意:本示例使用的是Linux容器。使用Docker Desktop的用戶,右鍵單擊系統托盤中的Docker徽標,確保您的環境正在運行Linux容器,若不是,請點擊「Switch to Linux containers...",如圖1.3所示,我當前演示環境使用的已經是Linux容器。
圖1.3
一、進入Powershell,並確保您當前目錄是node-bulletin-board/bulletin-board-app,如圖1.4所示,執行命令
# docker image build -t bulletinboard:1.0 .
圖1.4
在構建最後會輸出以下字樣,表示構建鏡像成功。
Successfully built 49f9b9fb7daf
Successfully tagged bulletinboard:1.0
上述命令表是建立一個名爲bulletinboard的鏡像(image),tag爲1.0,如圖1.5所示。
圖1.5
二、基於bulletinboard鏡像運行一個名爲bb的容器並之後臺方式運行,將容器內部端口8080,映射到宿主機的8000端口上。
# docker container run --publish 8000:8080 --detach --name bb bulletinboard:1.0
咱們可使用以下命令來查看run指命後能夠跟哪些參數
# docker container run --help
咱們登陸到容器,查看到當前目錄就是Dockerfile中設置的工做目錄,如圖1.6所示。
圖1.6
三、經過http://localhost:8000來訪問您的應用,您將看到以下界面,如圖1.7所示,則表示應用容器化部署成功,接下來就是進行測試、構建、發佈、分享等過程。
圖1.7
四、刪除一個容器,即表示該容器的生命週期結束。
# docker container rm --force bb
總結
完成上述操做後,咱們已經可以對應用程序執行一個簡單的容器化,並確認咱們的應用程序在其容器中成功運行。下一步將是編寫Kubernetes 的yaml文件,描述如何在Kubernetes上運行和管理容器。
另外,咱們應該要增強練習使用Dockerfile構建鏡像。