所有常用的 Docker 基礎 語法 整理

下面是最常用也最基礎的 docker 語法
點選標題可以連結到官方文件查看詳細說明
註1:下面的<docker_name>要替換為 容器的名稱,也可以替換為容器id
註2:<docker_name>前面可以加儲存庫ip位置,後面可以加tag
會長這樣:<registry_ip>/<docker_name>:<tag>
例:192.168.0.210:5000/mysql:latest

docker ps

查看所有容器(包含已停止)
docker ps -a

查看Image (映像檔) 注意!有"s"
docker images

docker pull <docker_name>

docker run <docker_name>
建立容器進階用法:
docker run [可選參數] [image名稱]:[版本(預設latest)] [執行指令]
常用可選參數:
-d 在後台執行容器並顯示容器 ID   --detach
-e 設置環境變數    --env  例:-e ORACLE_ALLOW_REMOTE=true
-p 將容器連接埠發佈到主機 例:-p 3306:3306
--name 設定容器名稱

下面以執行mysql5.7版本的做示範:
docker run -d -p 3306:3306 --name mysql-5.7 -e MYSQL_ROOT_PASSWORD=Zaq1xsw2 mysql:5.7

註:只能啟動已停止的容器,就是要在建立後的才可以啟動
docker start <docker_name>

docker stop <docker_name>

docker kill <docker_name>
註:stop 和 kill 的差別就像stop是點選關機選項,電腦把背景程式處理完成後關機,而kill是直接把電腦插頭拔掉。另外stop指令如果沒有在10秒內關閉容器的話,系統會自動執行kill指令,可以查看這篇stack overflow文章

docker restart <docker_name>

刪除容器 註:要先停止容器後才可以刪除容器
docker rm <docker_name>

註:要先停止和刪除容器後才可以刪除映像檔,後面可以加上冒號":"來指定版本
docker rmi <docker_name>
示範:刪除mysql image,版本5.7
docker rmi mysql:5.7

docker exec -it <docker_name> bash
使用系統管理員身份進入容器
docker exec -it -u root <docker_name> bash

備份

export 對應 import ,是備份當前的內容,包含修改的部分,還原時可以指定名稱
save 對應 load ,是備份原本匯入的image,不包含修改的部分,還原時不能指定名稱
可以使用commit 把變更的部分變為 image

docker export <docker_name> > <file_name>.tar
下面示範把名稱為 hello的容器輸出到hello.tar檔案內
docker export hello >  hello.tar

docker import <file_name> <image_name>:<tag>
範例:
docker import hello.tar hello:latest

docker save <docker_name> > <file_name>
範例:
docker save mysql:5.7 > mysql.tar

docker load < <file_name>
範例:
docker load < mysql.tar

docker commit <docker_name> <new_image_name>
參數:
-p 處理期間暫停容器
-m 訊息
-a 作者
範例:
docker commit -p -a ruyut -m test_message mysql new_mysql:latest

docker tag <docker_name>:<tag> <docker_new_name>:<new_tag>
範例:把mysql的5.7版標記為"db"的最新版
docker tag mysql:5.7 db:latest

查看image歷史紀錄 (可以查看commit msg)
docker history <docker_name>

docker inspect <docker_name>

docker logs <docker_name>
參數:
-f 追蹤日誌輸出(持續輸出)
-n=10 最後10行訊息
-t 顯示時間
--details 額外詳細資訊
範例:顯示 mysql 容器的最後30行 log訊息並且加上時間
docker logs -t -n=30 mysql

複製檔案進容器(最後的路徑的後面要有斜線或檔名)
docker cp <src-path> <container>:<dest-path>
範例:把本機下載資料夾內的test.log檔案複製到 mysql容器內的 /var/log資料夾下
docker cp ~/Downloads/test.log mysql:/var/log

把檔案從容器中複製出來
docker cp <container>:<src-path> <local-dest-path>
範例:把mysql容器內 /var/log資料夾的test.log檔案複製到本機的下載資料夾內
docker cp mysql:/var/log/test.log ~/Downloads/

留言