Docker 基本指令
使用的環境
系統與使用工具 |
---|
Centos 7.6 |
Docker 1.13.1 |
一、找到要用的映像檔(Image)
1. 尋找某個 Docker Image
$ docker search <軟體名稱>
# 尋找 nginx 的 Image 檔
$ docker search nginx
2. 下載搜尋到的 Docker Image
<Docker Image 名稱> 就是 docker search 指令執行結果所顯示的 [NAME]
$ docker pull <Docker Image 名稱>
# 下載 nginx 的 Image 檔
$ docker pull nginx
3. 查看已經下載過的 Docker image 檔
$ docker images
二、啟動一個 Docker Container
# 以 Detach 的方式啟動一個 Container
$ docker run -p [對外的埠號]:[預設的埠號] -d
# 啟動 nginx 的 Docker Images
$ docker run -p 8080:80 -d nginx
上述例子是要用 nginx 的 docker images 以 Detach 的方式在主機的 8080 port 上提供服務,
所以啟動這個 Container 後,可以在瀏覽器上用 http://127.0.0.1:8080 開啟網頁。
三、解決 Container 啟動後就結束的問題
Container 在作業系統也是被視為一隻執行中的行程(Process),
所以如果 Docker 裡面執行不是伺服器般的軟體,就會像跑一隻程式一樣,跑完就結束(像 Ubuntu 或 Node.js),
如果 Container 一啟動就結束的話,可以在 Container 啟用一個持續執行中的程式,保持運行。
四、看看啟動過哪些 Container
顯示出所有啟動過的 Container 的清單(包括正在執行與停止的)
# -a: 可以看到已經中斷運行和正在運行的 Container
$ docker ps -a
STATUS: 顯示 Container 已經啟動多久了。
五、啟動和停止和重新啟動 Container
(1) 啟動 Container
$ docker start <Container ID>
# <Container ID> 通常輸入前四碼就可以
$ docker start b87ea384818a
# 或
$ docker start b87e
(2) 停止 Container
$ docker stop <Container ID>
# <Container ID> 通常輸入前四碼就可以
$ docker stop b87ea384818a
# 或
$ docker stop b87e
(3) 重新啟動 Container
$ docker restart <Container ID>
# <Container ID> 通常輸入前四碼就可以
$ docker restart b87ea384818a
# 或
$ docker restart b87e
六、移除不再使用的 Container
Container 的狀態要在”停止”的狀態才可以移除,
且移除掉後無法再使用 start 和 restart 再啟動,先前啟動後所產生的資料也會不見。
$ docker rm <Container ID>
# <Container ID> 通常輸入前四碼就可以
$ docker remove b87ea384818a
# 或
$ docker remove b87e
七、刪掉一些不用的 Docker Image
Docker Image 會吃掉一部分的碟空間,所以沒用到的可以刪一刪,
且 Docker Image 是一層一層疊出來的,不同的 Docker Images 可能有共用到同一個層的部分,
所以移除掉某個 Docker Image 後所拿回的硬碟空間不一定會跟所想的一樣。
這也是為什麼不論下載或移除 Docker Image 的時候,都會看到是很多檔案在下載或刪除的緣故。
$ docker rmi <Image 名稱或 ID>
$ docker rmi nginx
八、查看 Container 資訊
docker inspect 會傳回一個 JSON 格式的資訊,
裡面包括 Container ID、Container 名稱、建立日期、網路配置、使用的 Docker Image、主機配置資訊、資料卷、各項配置參數。
# 檢視 Container 所有資訊
$ docker inspect <Container 名稱或 ID>
因為 docker inspect 資訊很多,所以可以使用 –format 選項,來擷取部分所需的資訊,加上 json 代表傳回的格式是 JSON。
# 使用 --format (-f) 選項來擷取 Container 部分資訊
# ._____ 代表某個欄位區段,大小寫要和 JSON 資料裡的欄位值完全相同,譬如狀態資訊就是 .State
$ docker inspect --format='{{jason .____}}' <Container 名稱或 ID>
# 擷取 Container 狀態資訊,相關資訊會放在 [State] 欄位區段
$ docker inspect --format='{{json .State}}' <Container 名稱或 ID>
# 查看 [State] 欄位區段裡的 [Status] 欄位值
$ docker inspect --format='{{json .State.Status}}' <Container 名稱或 ID>
九、查看每個 Container 用掉多少硬碟空間
最後面的 SIZE 有寫大小。
$ docker ps -s
十、查看哪一個 Container 用掉最多資源
docker stats 會出現全畫面的”即時” Container 資源使用狀況,Ctrl + C 退出。
$ docker stats <Container 名稱或ID>
# 加入 -a 列出所有的 Container,可以知道目前機器共有多少個 Container、哪些有在執行、哪些沒有在執行
$ docker stats -a
十一、查看 Container 的 Log
一次只能指定一個 Container,不支援同時查看多個 Container 的 Log 資訊。
$ docker logs <Container 名稱或 ID>
# 執行一個 nginx Container 後 curl 它,接著查看啟動後到目前為止的 log
$ docker run -d -p 8080:80 nginx
$ curl http://127.0.0.1:8080
$ docker logs 81e3
# 使用 --tail 指定最後幾行的 log 行數,查看最後兩行的 log
$ docker logs --tail 2 <Container 名稱或 ID>
$ docker logs --tail 2 81e3
# 使用 --since 查詢倒數幾分鐘以前的 log,查看兩分鐘前的 log
$ docker logs --since 2m <Container 名稱或 ID>
$ docker logs --since 2m 81e3
# 加上 -f 可以查看"即時更新"的 Container log,Ctrl + C 退出
$ docker logs -f <Container 名稱或 ID>
$ docker logs -f 81e3
十二、小技巧
1. 停止所有的 containers
$ docker stop $(docker ps -a -q)
2. 刪除所有的 containers
$ docker rm $(docker ps -a -q)
3. 刪除所有的 images
$ docker rmi $(docker images -a -q)
參考資料
- Docker 這樣學才有趣:從入門,到玩直播、挖礦