作者 | Saravanan Subramanian
翻譯 | 袁思思
來源 | https://dzone.com/articles/docker-commands-for-development-to-deployment
轉(zhuǎn)載:https://mp.weixin.qq.com/s?__biz=MzIzNzA5NzM3Ng==&mid=2651858043&idx=1&sn=d44eee15f19bc7fcbb1ab2f4cafd4199&chksm=f3295cb4c45ed5a21950de2f992ba6ebffdf9fdfab11591c6a93184874d07a28c0abc85a9ab7#rd
這篇文章的目的是為了理解在目標(biāo)環(huán)境中端到端的、容器開發(fā)到部署的流程,并且列出了每個活動所需的Docker命令。
1 簡介
全部的進程由開發(fā)的容器和相關(guān)軟件組成,并且在開發(fā)環(huán)境中配置、運行和測試容器,發(fā)布容器鏡像到Docker Hub中,最后部署Docker鏡像,在目標(biāo)環(huán)境中運行容器。本文假設(shè)你已經(jīng)在開發(fā)和目標(biāo)環(huán)境中安裝好了Docker引擎。請參考6.3的安裝說明。
2 開發(fā)容器鏡像
為了構(gòu)建容器鏡像,我們必須創(chuàng)建一個dockerfile,它將包含所有必要的信息。請參考這個文檔(https://nodejs.org/en/docs/guides/nodejs-docker-webapp/)來開發(fā)dockerfile。
2.1 構(gòu)建Docker容器
$docker build -t containername
這個命令將把Dockerfile放到當(dāng)前的目錄中。如果你的dockerfile名稱不一樣而且在不同的位置,可以使用-f 標(biāo)簽來指定dockerfile的名稱?!癲ocker build”命令將在“-t”標(biāo)簽指定的名稱中構(gòu)建容器鏡像。
$docker build -t myapp

2.2鏡像命名慣例
當(dāng)在本地運行的時候,可以給Docker容器隨便起什么名??梢院唵蔚南裆厦嫣岬降摹癿yApp”。但是如果你想發(fā)布鏡像到Docker Hub中,那么就需要遵循一個指定的命名慣例。這個慣例可以幫助Docker工具來發(fā)布容器鏡像到正確的命名空間和資源庫中。
格式:NameSpace/Repository:Version
所以我用上面的管理構(gòu)架docker鏡像:
$docker build -t saravasu/techietweak:001
還能用“docker tag”命令從外部鏡像創(chuàng)建鏡像?!癲ocker tag”在下面解釋。
2.3 在Docker中列出所有鏡像
$docker images

3 運行容器
3.1 啟動Docker容器
使用“docker run”命令來啟動Docker容器。
$docker run -d -p 8080:8080 saravasu/techietweak:001

“-d”選項在分離模式中運行容器,因此容器繼續(xù)運行,甚至終端被關(guān)閉。
“-p”命令用來映射端口。在這個例子中,“-p 8080:8080”第一個端口號是Docker主機用的端口。第二個端口號是被Docker容器使用。根據(jù)這個命令,所有的流量到達Docker主機端口,將轉(zhuǎn)到Docker容器端口。
3.2 檢查當(dāng)前運行的容器
$docker ps

從上面的輸出,我們看到一個Docker容器在名為“trusting_snyder.”中運行。
若要列出所有的容器,使用“- a”切換。
$docker ps -a
3.3 展示運行容器的控制臺日志
$docker logs <containerName>

容器名稱可以通過 “docker ps” 命令發(fā)現(xiàn)。
3.4 登陸到容器
$docker exec -it containerId /bin/bash
上面的命令將提示你使用容器的“bash”。

3.5 停止運行的容器
$docker stop <containername>

3.6 從Docker移除容器鏡像
$docker rm imageId
使用“docker images” 或“docker images -a.”命令發(fā)現(xiàn)容器的imageId。
$docker rmi -f <List Of Image Ids>

上面的命令將強有力的刪除指定的鏡像。
4 發(fā)布容器鏡像
Docker容器鏡像可以發(fā)布到本地dockyard或公共Docker Hub。這兩個過程和命令都是一樣的。要在Docker Hub中發(fā)布Docker映像,首先在http://hub.docker.com上創(chuàng)建名稱空間和資源庫。
我用了我的命名空間“saravasu”和資源庫“techietweak”來進行這個練習(xí)。
4.1 登陸Docker Hub
$docker login
如果你想登陸到本地的資源庫,需要提供URL。如果URL不是特定的,那么這個命令將登陸到Docker Hub中。
$docker login http://localhost:8080
4.2 標(biāo)記容器鏡像
要將Docker容器映像推到Docker Hub,它必須以特定的格式標(biāo)記:< Namespace > / < Repository >:< Version >。如果未指定該版本,將被視為“默認(rèn)”。在下面的命令中,我標(biāo)記了鏡像:
$docker tag myapp:latest saravasu/techietweak:001
4.3 把Docker鏡像推到Docker Hub中
$docker push saravasu/techietweak:001
4.4 在Docker Hub中檢查容器鏡像
現(xiàn)在登陸你的Docker Hub賬戶,然后在各自的資源庫中檢查鏡像。
5 部署容器
5.1 拉出Docker容器鏡像
在目標(biāo)環(huán)境中,從主機登陸到Docker Hub中,并且從Docker Hub中拉出容器鏡像。如果你想從自己的dockyard拉出,使用“$docker login <hostname>”命令指定自己dockyard的主機名。
$docker login
上面的命令將登陸到https://hub.docker.com,因為主機名沒有指定。
$docker pull saravasu/techietweak:001
5.2 檢查鏡像
docker pull命令從Docker Hub下載容器鏡像。我們可以使用“docker images”命令來驗證相同的結(jié)果。
$docker images
5.3 運行容器
現(xiàn)在,我們可以用同樣的方式運行Docker容器,就像在開發(fā)環(huán)境中運行一樣,用我們以前做過的方式來測試它。
$docker run -d -p 8080:8080 saravasu/techietweak:001
docker run命令啟動容器。為了驗證,可以使用“docker ps”命令。Docker創(chuàng)建了一個新的容器,以“naughty_lewin.的名字運行。
正如我們在上面看到的,Docker引擎為運行的容器提供了一個隨機的名稱,但這可能在自動化中是個問題,因此指定一個我們要參考的名稱總是好的。這可以通過使用“- name”參數(shù)實現(xiàn)。
$docker run -d -p 8080:8080 --name "myNodeJsWebContainer" saravasu/techietweak:001
6 總結(jié)
這篇文章截取了開發(fā)容器鏡像的流程和必要命令,在本地環(huán)境中運行,發(fā)布鏡像到Docker Hub,在目標(biāo)環(huán)境中運行容器等等。進一步的研究和詳細(xì)的文檔在Docker網(wǎng)站上可以找到。