构建您的 Rust 镜像
- 您已安装最新版本的 。
- 你有一个 。本节中的示例使用基于命令行的 git 客户端,但您可以使用任何客户端。
本指南将引导您构建您的第一个 Rust 镜像。映像包含运行应用程序所需的一切 – 代码或二进制文件、运行时、依赖项以及所需的任何其他文件系统对象。
克隆示例应用程序以与本指南一起使用。打开终端,将目录更改为您想要工作的目录,然后运行以下命令来克隆存储库:
$ git clone https://github.com/docker/docker-rust-hello
现在您已经有了一个应用程序,您可以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 的更多信息,请参阅 。
当您运行时docker init,它还会创建一个 文件。使用该.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,另一种是使用 。由于您已经在终端中工作,请查看使用 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 文件。然后它向您展示了如何构建图像。最后,它向您展示了如何标记图像并列出所有图像。
相关信息:
在下一节中,了解如何将映像作为容器运行。
