建置您的 Rust 映像檔
先決條件
- 您已安裝最新版本的 Docker Desktop。
- 您有一個 git 用戶端。本節中的範例使用基於命令列的 git 用戶端,但您可以使用任何用戶端。
概覽
本指南將引導您建置您的第一個 Rust 映像檔。映像檔包含執行應用程式所需的一切 - 程式碼或二進位檔、執行階段、依賴項和任何其他所需的檔案系統物件。
取得範例應用程式
複製範例應用程式以搭配本指南使用。開啟終端機,將目錄更改為您要工作的目錄,然後執行以下命令來複製儲存庫
$ git clone https://github.com/docker/docker-rust-hello
為 Rust 建立 Dockerfile
現在您已擁有一個應用程式,您可以使用 `docker init` 為其建立 Dockerfile。在 `docker-rust-hello` 目錄中,執行 `docker init` 命令。`docker init` 提供一些預設配置,但您需要回答一些關於您應用程式的問題。參考以下範例來回答 `docker init` 的提示,並為您的提示使用相同的答案。
$ docker init
Welcome to the Docker Init CLI!
This utility will walk you through creating the following files with sensible defaults for your project:
- .dockerignore
- Dockerfile
- compose.yaml
- README.Docker.md
Let's get started!
? What application platform does your project use? Rust
? What version of Rust do you want to use? 1.70.0
? What port does your server listen on? 8000
您現在應該在您的 `docker-rust-hello` 目錄中有以下新檔案
- Dockerfile
- .dockerignore
- compose.yaml
- README.Docker.md
若要建置映像檔,只需要 Dockerfile。在您慣用的 IDE 或文字編輯器中開啟 Dockerfile 並查看其內容。要深入瞭解 Dockerfile,請參閱 Dockerfile 參考。
.dockerignore 檔案
當您執行 `docker init` 時,它還會建立一個 `.dockerignore` 檔案。使用 `.dockerignore` 檔案來指定您不想複製到映像檔中的模式和路徑,以盡可能保持映像檔的精簡。在您慣用的 IDE 或文字編輯器中開啟 `.dockerignore` 檔案並查看其中的內容。
建置映像檔
現在您已建立 Dockerfile,您可以建置映像檔。要執行此操作,請使用 `docker build` 命令。`docker build` 命令會從 Dockerfile 和一個上下文建置 Docker 映像檔。建置的上下文是位於指定 PATH 或 URL 中的檔案集。Docker 建置過程可以存取位於此上下文中的任何檔案。
建置命令可以選擇性地採用 `--tag` 旗標。標籤會以 `name:tag` 的格式設定映像檔的名稱和一個選擇性標籤。如果您沒有傳遞標籤,Docker 會使用 "latest" 作為其預設標籤。
建置 Docker 映像檔。
$ docker build --tag docker-rust-image .
您應該會看到如下輸出。
[+] Building 62.6s (14/14) FINISHED
=> [internal] load .dockerignore 0.1s
=> => transferring context: 2B 0.0s
=> [internal] load build definition from Dockerfile 0.1s
=> => transferring dockerfile: 2.70kB 0.0s
=> resolve image config for docker.io/docker/dockerfile:1 2.3s
=> CACHED docker-image://docker.io/docker/dockerfile:1@sha256:39b85bbfa7536a5feceb7372a0817649ecb2724562a38360f4d6a7782a409b14 0.0s
=> [internal] load metadata for docker.io/library/debian:bullseye-slim 1.9s
=> [internal] load metadata for docker.io/library/rust:1.70.0-slim-bullseye 1.7s
=> [build 1/3] FROM docker.io/library/rust:1.70.0-slim-bullseye@sha256:585eeddab1ec712dade54381e115f676bba239b1c79198832ddda397c1f 0.0s
=> [internal] load build context 0.0s
=> => transferring context: 35.29kB 0.0s
=> [final 1/3] FROM docker.io/library/debian:bullseye-slim@sha256:7606bef5684b393434f06a50a3d1a09808fee5a0240d37da5d181b1b121e7637 0.0s
=> CACHED [build 2/3] WORKDIR /app 0.0s
=> [build 3/3] RUN --mount=type=bind,source=src,target=src --mount=type=bind,source=Cargo.toml,target=Cargo.toml --mount= 57.7s
=> CACHED [final 2/3] RUN adduser --disabled-password --gecos "" --home "/nonexistent" --shell "/sbin/nologin" 0.0s
=> CACHED [final 3/3] COPY --from=build /bin/server /bin/ 0.0s
=> exporting to image 0.0s
=> => exporting layers 0.0s
=> => writing image sha256:f1aa4a9f58d2ecf73b0c2b7f28a6646d9849b32c3921e42adc3ab75e12a3de14 0.0s
=> => naming to docker.io/library/docker-rust-image
檢視本地映像檔
要查看您在本機電腦上的映像檔清單,您有兩個選項。一個是使用 Docker CLI,另一個是使用 Docker Desktop。由於您已經在終端機中工作,請查看使用 CLI 列出映像檔。
要列出映像檔,請執行 `docker images` 命令。
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker-rust-image latest 8cae92a8fbd6 3 minutes ago 123MB
您應該會看到列出至少一個映像檔,包括您剛建置的映像檔 `docker-rust-image:latest`。
標記映像檔
如前所述,映像檔名稱是由斜線分隔的名稱組件組成。名稱組件可以包含小寫字母、數字和分隔符號。分隔符號可以包含句點、一個或兩個底線,或一個或多個破折號。名稱組件不能以分隔符號開頭或結尾。
映像檔是由一個清單和一個圖層清單組成。目前不必太擔心清單和圖層,只要知道「標籤」指向這些成品的組合即可。您可以為一個映像檔設置多個標籤。為您建置的映像檔建立第二個標籤,並查看其圖層。
要為您建置的映像檔建立新的標籤,請執行以下命令。
$ docker tag docker-rust-image:latest docker-rust-image:v1.0.0
`docker tag` 命令會為映像檔建立新的標籤。它不會建立新的映像檔。標籤指向同一個映像檔,只是參考映像檔的另一種方式。
現在,執行 `docker images` 命令以查看本地映像檔的清單。
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker-rust-image latest 8cae92a8fbd6 4 minutes ago 123MB
docker-rust-image v1.0.0 8cae92a8fbd6 4 minutes ago 123MB
rust latest be5d294735c6 4 minutes ago 113MB
您可以看到有兩個映像檔以 `docker-rust-image` 開頭。您知道它們是同一個映像檔,因為如果您查看 `IMAGE ID` 欄,您可以看到兩個映像檔的值相同。
移除您剛建立的標籤。要執行此操作,請使用 `rmi` 命令。`rmi` 命令代表移除映像檔。
$ docker rmi docker-rust-image:v1.0.0
Untagged: docker-rust-image:v1.0.0
請注意,來自 Docker 的回應告訴您 Docker 並沒有移除映像檔,而只是將其「取消標記」。您可以透過執行 `docker images` 命令來檢查這一點。
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker-rust-image latest 8cae92a8fbd6 6 minutes ago 123MB
rust latest be5d294735c6 6 minutes ago 113MB
Docker 移除了標記為 `:v1.0.0` 的映像檔,但 `docker-rust-image:latest` 標籤在您的電腦上仍然可用。
摘要
本節說明如何使用 `docker init` 為 Rust 應用程式建立 Dockerfile 和 .dockerignore 檔案。然後說明如何建置映像檔。最後,說明如何標記映像檔和列出所有映像檔。
相關資訊
後續步驟
在下一節中,學習如何將您的映像檔作為容器執行。