這篇會盡量紀錄 docker 常用指令。

Images 相關的指令

Images 可以當作是一種範本或是一個起始點,準備拿來建立 Container。

指令 說明
docker build 讀取 Dockerfiles 建立 Image。
docker images 列出本地端的 Image
docker pull 從 Repository 下載 Image。
docker push 發佈本地端的 Image 到遠端的 Repository。
docker tag 對 Image 下 tag。
docker rmi 刪除本地端 Image。
指令使用範例
  • docker build . -t myapp -f Dockerfile
    • 參數 -t 表示建立的 image 名稱。
    • -f 指定讀取的 Dockerfile 檔,若沒指定預設讀取 Dockerfile。
  • docker pull mcr.microsoft.com/dotnet/framework/aspnet
  • docker push adamfreeman/exampleapp:changed
  • docker tag apress/exampleapp:changed adamfreeman/exampleapp:changed
  • docker rmi 0abb -f
    • 0abb 為 Image 的 IMAGE ID , 在使用 docker images 可以看到
    • 使用 -f 參數,可以連 Container 一起砍掉

列出指令的詳細用法 docker build --help

Dockerfile 相關指令

從 Dcoker hub 下載 base images 後,再透過 dockerfile 寫好執行腳本,就可以產生自己專案要執行的 image。

指令 說明
FROM 指定要 Pull 哪一個 Image
WORKDIR 指定 container 裡面的路徑
COPY 複製本地端的檔案到 container 裡面
RUN 執行某一個命令,且執行完後會建立新的 image。 通常用於在 container 下載套件
CMD 指令可以被複寫的預設命令。 詳細請看下方 RUN vs CMD vs ENTRYPOINT 的說明
ENV 設定環境變數
VOLUME 建立一個放檔案的功能。 當 container 被砍掉重新啟動的時候,檔案還會存在。
ENTRYPOINT container 被建立後所執行的指令
簡單的 Dockerfile 範例
Dockerfile
  • dockerfile
1
2
3
4
FROM mcr.microsoft.com/dotnet/core/aspnet:2.1
WORKDIR /app
COPY . .
ENTRYPOINT ["dotnet", "CoolWeb.dll"]
關於 RUN vs CMD vs ENTRYPOINT 的比較

Use RUN instructions to build your image by adding layers on top of initial image.

Prefer ENTRYPOINT to CMD when building executable Docker image and you need a command always to be executed. Additionally use CMD if you need to provide extra default arguments that could be overwritten from command line when docker container runs.

Choose CMD if you need to provide a default command and/or arguments that can be overwritten from command line when docker container runs.

Container 相關指令

Dcoker 可以從同一個 images 建立不同的 container。 而 container 就是一個可以執行的應用程式,且每一個container 之間都是互相獨立不影響的。

指令 說明
docker create 建立 container
docker start 執行 container
docker run 建立與執行 container
docker stop 停止 container
docker rm 刪除 container
docker ps 列出執行中的 container
docker logs 顯示執行中 container 的 log
docker exec 在 container 執行指令
docker cp 複製本地端檔案到 Container
Container 指令常用參數
指令 說明
-e, --env 設定環境變數
--name 設定 container 的別名
--network 設定 container 連線至 software-defined network
-p, --publish 設定 host system 與 container 內部 port 的對應
--rm container 停止後會自動將 container 刪除
-v, --volume 設定要使用哪一個 volume
-d 執行於背景模式

Volumes 相關指令

Volumes 可以讓資料存在 container 之後,這意味著當 container 被刪除或者是更新的時候,這些資料不會消失。

指令 說明
docker volume create 建立新的 volume
docker volume ls 列出建立的 volume
docker volume rm 刪除 volume

Docker Software-Defined Networks 相關指令

Software-Defined Networks 用在能夠讓 containers 之間能夠連線。

指令 說明
docker network create 建立一個 network
docker network connect 將 container 連線到一個 network
docker network ls 列出 network
docker network rm 刪除 network
docker network prune 移除沒有用到的 networks
簡單的 Networks 指令範例
docker network
  • bash
1
2
3
4
docker network create backend

docker run -d --name mysql -v productdata:/var/lib/mysql --network=backend -e
MYSQL_ROOT_PASSWORD=mysecret -e bind-address=0.0.0.0 mysql:8.0.0

延伸閱讀

[Docker network]
[Docker container command line]
[Docker command line]