從開發到部署會用到的 Docker 命令
本文的目的是理解容器開發在目標環境中部署的端到端流程,並列出這些操作所需的 Docker 命令。
1. 介紹
整個流程包括使用代碼、依賴軟體和配置來開發容器映像,在開發環境中運行和測試容器,將容器映像發布到 Docker Hub,以及最後的部署和在目標環境中運行容器。
本文假設您已經在開發和目標環境中安裝了 Docker 引擎。有關安裝說明請參閱 6.3。
2. 開發容器映像
在構建容器映像之前,你需要創建一個 dockerfile,它包含了所需要的信息。請參考這裡來編製一個 dockerfile。
2.1 構建 Docker 容器
$docker build -t containername .
這個命令會使用當前目錄下的 Dockerfile。如果 dockerfile 使用了其它文件名或者放在其它位置,可以使用 -f 參數來指定 dockerfile 的名稱。「docker build」 命令會構建容器映像,這個容器映像的名稱由 「-t」 參數指定。
$docker build -t myapp .
2.2 Docker 映像命名規範
如果你只是在本地使用,那麼你可以隨意為 Docker 容器命名。它可以像上面那邊簡單的命名為「myApp」。但是如果你想將映像發布到 Docker Hub,就需要遵循特定的命名規範。這個規範有助於 Docker 工具將容器映像發布到正確的命名空間和倉庫。
格式如下:
NameSpace/Repository:Version
現在我們按上面的規範來構建 Docker 映像:
$docker build -t saravasu/techietweak:001 .
我們可以使用「docker tag」命令從已經存在的映像創建新的映像。「docker tag」命令會在下面說明。
2.3 列出 Docker 中所有映像
$docker images
3. 運行容器
3.1 啟動 Docker 容器
使用「docker run」命令來啟動 Docker 容器。
$docker run -d -p 8080:8080 saravasu/techietweak:001
「-d」 參數會讓容器以獨立的模式來運行容器,這樣即使終端關閉了容器仍然會保持運行。
「-p」 用於映射容器。比如,「-p 8080:8080」 的第一個埠號用在 Docker 主機上,第二個埠號是在 Docker 容器中使用的。根據這個參數的設置,所有對 Docker 主機埠的數據傳輸都會被轉發到對應的 Docker 容器埠。
3.2 查看運行中的容器
$docker ps
從上面的輸出我們可以看到 Docker 容器以 「trusting_snyder」 這個名字在運行。
如果要列出所有容器,而不管其狀態如何,使用 「-a」 參數。
$docker ps -a
3.3 顯示運行中容器的控制台日誌
$docker logs <containerName>
ContainerName(容器名稱) 可以通過 「docker ps」 命令找到。
3.4 登入容器
$docker exec -it containerId /bin/bash
上面的命令會用容器中的 「bash」 shell 給出提示。
3.5 停止容器運行
$docker stop <containername>
3.6 從 Docker 中刪除容器映像
$docker rm imageId
使用 「docker images」 或 「docker images -a」 命令找到 imageId(映像 ID)。
$docker rmi -f <List Of Image Ids>
上面的命令會強制刪除指定的映像。
3.7 清理 Docker / 刪除本地 Docker 中所有容器映像
$docker rmi -f $(docker images | tr -s " " " " | cut -d" " -f3)
4. 發布容器映像
Docker 容器映像可以發布到本地庫或公共的 Docker Hub。兩種情況所使用的命令的操作過程一樣。為了將你的 Docker 映像發布到 Docker Hub,你得先在 http://hub.docker.com 創建自己的命名空間和倉庫。
我自己的命名空間是 「saravasu」,當前練習使用的倉庫是 「techietweak」。
4.1 登錄 Docker Hub
$docker login
如果你想登錄本地庫,請先提供 URL。如果沒有指定 URL,那麼這個命令會登錄 Docker Hub。
$docker login http://localhost:8080
4.2 標記容器映像
在把容器映像推送到 Docker Hub 之前,必須按指定的格式對其進行標記:<Namespace>/<Repository>:<Version>。如果你沒有指定版本(version),它會使用默認的 「default」。下面的命令演示了標記映像:
$docker tag myapp:latest saravasu/techietweak:001
4.3 將 Docker 映像推送到 Docker Hub
$docker push saravasu/techietweak:001
4.4 在 Docker Hub 中檢查容器映像
現在使用你的賬號登錄 Docker Hub 並檢查映像的倉庫中進行檢查。
5 部署容器
5.1 拉取 Docker 容器映像
在主機的目標環境中登錄 Docker Hub 並從 Docker Hub 拉取容器映像。如果你想從私有的船塢(指 Docke 映像庫)中拉取,需要使用命令 「$docker login <hostname>」 來指定私有倉船塢的主機名(hostname)。
$docker login
由於上面的命令沒有指定主機名稱,它會登錄 https://hub.docker.com。
$docker pull saravasu/techietweak:001
5.2 檢查映像
docker pull 命令會從 Docker Hub 下載容器映像。我們可以使用 「docker images」 命令來對其進行檢查。
$docker images
5.3 運行容器
現在我們用與在開發環境下運行測試相同的方法來運行 Docker 容器。之前做過,輕車熟路。
$docker run -d -p 8080:8080 saravasu/techietweak:001
docker run 命令會啟動容器。可以使用 「docker ps」 命令來檢查。Docker 創建並運行了一個新的容器,其名稱為 「naughty_lewin」。
我們在上面看到 Docker 引擎為運行的容器提供了一個隨機的名稱,這在自動化過程中可能會產生問題,所以最好是按我們的意願指定一個名稱。這可以由 「-name」 參數實現。
$docker run -d -p 8080:8080 --name "myNodeJsWebContainer" saravasu/techietweak:001
6. 總結
本文涵蓋了開發一個容器映像的流程和必要的命令,講解了在本地環境運行,以及將映像發布到 Docker Hub,並在目標環境運行容器。想進一步研究,或者閱讀詳細的文檔,請移步 Docker 網站 [參考 6.1]。


※2017 年八款值得嘗試的精美的 Linux 發行版
※與 Docker 緊密整合的 12 大開源工具
※可能是國內最火的開源項目——C/C++ 篇
※React 放棄專利條款,將許可證將改為 MIT
※2017 全棧開發人員修鍊指南
TAG:OSC開源社區 |