這裡整理了一些常用的 Docker 指令操作方式,包含容器的啟動、停止、監看、檔案複製與目錄掛載等。
docker run
可以用來啟動 Docker 虛擬容器環境:
# 啟動 Docker 容器 docker run -it tensorflow/tensorflow bash
加上 -it
參數代表在執行 Docker 虛擬容器環境時,開啟虛擬終端機,以互動的模式執行。這個例子是執行一個 TensorFlow 的 Docker 容器,並且在 Docker 中執行 bash
。
docker ps
可以列出所有 Docker 容器的資訊:
# 列出所有 Docker 容器
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES d9b6f31bd21d tensorflow/tensorflow "bash" About a minute ago Up About a minute 6006/tcp, 8888/tcp elated_panini
從輸出中可以看到這個新的 Docker 容器 ID 為 d9b6f31bd21d
。
若要停止 Docker 容器,可以使用 stop
指令:
# 停止 Docker 容器
docker stop DOCKER_ID
其中 DOCKER_ID
就是 Docker 容器的 ID。
如果 Docker 容器當掉,可以考慮改用 kill
:
# 強制停止 Docker 容器
docker kill DOCKER_ID
若要重新啟動 Docker 容器,則可使用 restart
:
# 重新啟動 Docker 容器
docker restart DOCKER_ID
若要暫停 Docker 容器,可用:
# 暫停 Docker 容器
docker pause DOCKER_ID
若要讓暫停的 Docker 容器恢復執行,則使用:
# 恢復 Docker 容器
docker unpause DOCKER_ID
接著在實體機器(host)中使用 docker cp
指令,將檔案複製到該容器內:
# 複製檔案
docker cp /path/to/file1 DOCKER_ID:/path/to/file2
這樣就會把實體機器的 /path/to/file1
複製到 Docker 容器中的 /path/to/file2
。
Docker 容器內的預設路徑是根目錄(/
),所以上面的指令也可以寫成:
# 複製檔案
docker cp /path/to/file1 DOCKER_ID:path/to/file2
docker cp
的運作方式類似 Linux 系統的 cp -a
指令,也就是說它可以直接複製整個目錄以及其子目錄:
# 複製檔案
docker cp /path/to/folder DOCKER_ID:/another/path/
這樣就會把實體機器的 /path/to/folder
目錄整個複製到 Docker 容器中的 /another/path/
。
若要把 Docker 容器內的檔案複製出來,也是使用類似的做法:
# 複製檔案
docker cp DOCKER_ID:/path/to/file1 /path/to/file2
這樣就可以把 Docker 容器內的 /path/to/file1
複製到實體機器的 /path/to/file2
。目錄的複製方法也相同:
# 複製目錄
docker cp DOCKER_ID:/path/to/folder /path/to/
如果想要將實體機器的目錄直接掛載至 Docker 容器內,可以使用 -v
參數:
# 掛載目錄 docker run -it -v /home/seal/data:/data tensorflow/tensorflow bash
這樣就會將實體機器的 /home/seal/data
掛載至 Docker 容器內的 /data
,讓實體機器與 Docker 容器可以共享同一個目錄,在 Docker 容器中將資料放進這個目錄時,於實體機器中可以同時看見,反之亦然。
Docker 預設並不會限制容器的 CPU 使用量,也就是說實體機器有多少 CPU 核心,Docker 容器就可以使用多少。若要限制 Docker 容器的 CPU 使用量,可以使用 --cpus
來指定可用的 CPU 數量:
# 限制 CPU 使用量 docker run -it --cpus=1.5 agileek/cpuset-test
這樣就會限制 Docker 容器最多只能使用到 1.5 顆實體的 CPU。
記憶體的狀況與 CPU 類似,預設都沒有任何限制,若要限制記憶體與 swap 交換空間的用量,可以使用 --memory
與 --memory-swap
參數:
# 限制記憶體使用量 docker run -it --memory=300m --memory-swap=1g tensorflow/tensorflow bash
這樣就會允許 Docker 容器使用 300m
的記憶體,以及 1g - 300m = 700m
的 swap 交換空間。
如果要讓 Docker 容器內部的服務可以接收來自於外部的網路連線,可以使用 -p
參數將 Docker 容器內部的連接埠對應到實體機器的連接埠:
# 設定網路連接埠對應 docker run -it -p 80:8888 tensorflow/tensorflow
這樣就會將 Docker 容器的 8888
連接埠,對應到實體機器的 80
連接埠。
這是將 Docker 容器的 8080
連接埠與實體機器 127.0.0.1
的 80
連接埠的例子:
# 設定網路連接埠對應 docker run -p 127.0.0.1:80:8080 ubuntu bash
若要查看 Docker 容器的 CPU、記憶體與網路用量,可以使用 stats
:
# 查看 CPU、記憶體與網路用量
docker stats
若要查看 Docker 容器內部的行程,可以使用 top
:
# 查看 Docker 容器內部的行程
docker top DOCKER_ID
參考資料:StackOverflow、Docker docs