本文的目的是理解容器開發(fā)在目標環(huán)境中部署的端到端流程,并列出這些操作所需的 Docker 命令。
1. 介紹
整個流程包括使用代碼眷细、依賴軟件和配置來開發(fā)容器映像巡通,在開發(fā)環(huán)境中運行和測試容器尘执,將容器映像發(fā)布到 Docker Hub,以及最后的部署和在目標環(huán)境中運行容器宴凉。
本文假設您已經(jīng)在開發(fā)和目標環(huán)境中安裝了 Docker 引擎誊锭。有關安裝說明請參閱 6.3。
2. 開發(fā)容器映像
在構建容器映像之前弥锄,你需要創(chuàng)建一個 dockerfile丧靡,它包含了所需要的信息。請參考這里來編制一個 dockerfile籽暇。
2.1 構建 Docker 容器
$docker build -t containername .
這個命令會使用當前目錄下的 Dockerfile温治。如果 dockerfile 使用了其它文件名或者放在其它位置,可以使用 -f 參數(shù)來指定 dockerfile 的名稱戒悠“揪#“docker build” 命令會構建容器映像,這個容器映像的名稱由 “-t” 參數(shù)指定绸狐。
$docker build -t myapp .
2.2 Docker 映像命名規(guī)范
如果你只是在本地使用卤恳,那么你可以隨意為 Docker 容器命名。它可以像上面那邊簡單的命名為“myApp”寒矿。但是如果你想將映像發(fā)布到 Docker Hub纬黎,就需要遵循特定的命名規(guī)范。這個規(guī)范有助于 Docker 工具將容器映像發(fā)布到正確的命名空間和倉庫劫窒。
格式如下:
NameSpace/Repository:Version
現(xiàn)在我們按上面的規(guī)范來構建 Docker 映像:
$docker build -t saravasu/techietweak:001 .
我們可以使用“docker tag”命令從已經(jīng)存在的映像創(chuàng)建新的映像本今。“docker tag”命令會在下面說明主巍。
2.3 列出 Docker 中所有映像
$docker images
3. 運行容器
3.1 啟動 Docker 容器
使用“docker run”命令來啟動 Docker 容器冠息。
$docker run -d -p 8080:8080 saravasu/techietweak:001
“-d” 參數(shù)會讓容器以獨立的模式來運行容器,這樣即使終端關閉了容器仍然會保持運行孕索。
“-p” 用于映射容器逛艰。比如,“-p 8080:8080” 的第一個端口號用在 Docker 主機上搞旭,第二個端口號是在 Docker 容器中使用的散怖。根據(jù)這個參數(shù)的設置菇绵,所有對 Docker 主機端口的數(shù)據(jù)傳輸都會被轉發(fā)到對應的 Docker 容器端口。
3.2 查看運行中的容器
$docker ps
從上面的輸出我們可以看到 Docker 容器以 “trusting_snyder” 這個名字在運行镇眷。
如果要列出所有容器咬最,而不管其狀態(tài)如何,使用 “-a” 參數(shù)欠动。
$docker ps -a
3.3 顯示運行中容器的控制臺日志
$docker logs
ContainerName(容器名稱) 可以通過 “docker ps” 命令找到永乌。
3.4 登入容器
$docker exec -it containerId /bin/bash
上面的命令會用容器中的 “bash” shell 給出提示。
3.5 停止容器運行
$docker stop
3.6 從 Docker 中刪除容器映像
$docker rm imageId
使用 “docker images” 或 “docker images -a” 命令找到 imageId(映像 ID)具伍。
$docker rmi -f
上面的命令會強制刪除指定的映像翅雏。
3.7 清理 Docker / 刪除本地 Docker 中所有容器映像
$docker rmi -f $(docker images | tr -s ' ' ' ' | cut -d' ' -f3)
4. 發(fā)布容器映像
Docker 容器映像可以發(fā)布到本地庫或公共的 Docker Hub。兩種情況所使用的命令的操作過程一樣人芽。為了將你的 Docker 映像發(fā)布到 Docker Hub望几,你得先在 http://hub.docker.com 創(chuàng)建自己的命名空間和倉庫。
我自己的命名空間是 “saravasu”萤厅,當前練習使用的倉庫是 “techietweak”橄妆。
4.1 登錄 Docker Hub
$docker login
如果你想登錄本地庫,請先提供 URL祈坠。如果沒有指定 URL害碾,那么這個命令會登錄 Docker Hub。
$docker login http://localhost:8080
4.2 標記容器映像
在把容器映像推送到 Docker Hub 之前赦拘,必須按指定的格式對其進行標記:/:慌随。如果你沒有指定版本(version),它會使用默認的 “default”躺同。下面的命令演示了標記映像:
$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 容器映像
在主機的目標環(huán)境中登錄 Docker Hub 并從 Docker Hub 拉取容器映像。如果你想從私有的船塢(指 Docke 映像庫)中拉取蹋艺,需要使用命令 “$docker login ” 來指定私有倉船塢的主機名(hostname)剃袍。
$docker login
由于上面的命令沒有指定主機名稱,它會登錄 https://hub.docker.com捎谨。
$docker pull saravasu/techietweak:001
5.2 檢查映像
docker pull 命令會從 Docker Hub 下載容器映像民效。我們可以使用 “docker images” 命令來對其進行檢查。
$docker images
5.3 運行容器
現(xiàn)在我們用與在開發(fā)環(huán)境下運行測試相同的方法來運行 Docker 容器涛救。之前做過畏邢,輕車熟路。
$docker run -d -p 8080:8080 saravasu/techietweak:001
docker run 命令會啟動容器检吆∈嫖可以使用 “docker ps” 命令來檢查佃牛。Docker 創(chuàng)建并運行了一個新的容器枝嘶,其名稱為 “naughty_lewin”。
我們在上面看到 Docker 引擎為運行的容器提供了一個隨機的名稱磺浙,這在自動化過程中可能會產(chǎn)生問題莉给,所以最好是按我們的意愿指定一個名稱被济。這可以由 “-name” 參數(shù)實現(xiàn)肄满。
$docker run -d -p 8080:8080 --name "myNodeJsWebContainer" saravasu/techietweak:001
6. 總結
本文涵蓋了開發(fā)一個容器映像的流程和必要的命令砖第,講解了在本地環(huán)境運行,以及將映像發(fā)布到 Docker Hub素征,并在目標環(huán)境運行容器集嵌。想進一步研究萝挤,或者閱讀詳細的文檔御毅,請移步 Docker 網(wǎng)站 [參考 6.1]。
編譯自:Docker Commands for Development to Deployment
譯者:開源中國 - 邊城, 無若