构建您的 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
- 自述文件.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 文件。然后它向您展示了如何构建图像。最后,它向您展示了如何标记图像并列出所有图像。
相关信息:
下一步
在下一节中,了解如何将映像作为容器运行。