Skip to content

快速参考

  • 由……维护: (注:原文中“Maintained by:”后面应该会有具体的维护者信息,若有完整内容,翻译会更加准确。这里仅根据给定的部分进行了翻译。)
    Rust 项目开发者

  • 哪里可以获得帮助:
    Docker 社区 Slack、Server Fault、Unix & Linux 或 Stack Overflow

支持的标签及各自的 Dockerfile 链接

快速参考(续)

什么是 Rust?

Rust 是由 Mozilla 研究赞助的一种系统编程语言。它旨在成为一种“安全、并发、实用的语言”,支持函数式和命令式 - 过程式范式。Rust 在语法上与 C++相似,但设计目的是在保持性能的同时实现更好的内存安全。

wikipedia.org/wiki/Rust(编程语言)

logo

如何使用此图像

启动一个运行您的应用程序的 Rust 实例

使用此图像的最直接方法是将 Rust 容器同时用作构建和运行时环境。在您的 Dockerfile 中,编写类似于以下内容的内容将编译并运行您的项目:

FROM rust:1.67

WORKDIR /usr/src/myapp
COPY . .

RUN cargo install --path .

CMD ["myapp"]

然后,构建并运行 Docker 镜像:

$ docker build -t my-rust-app .
$ docker run -it --rm --name my-running-app my-rust-app

这会创建一个包含该图像的所有 Rust 工具的映像,其大小为 1.8GB。如果您只想要编译后的应用程序:

FROM rust:1.67 as builder
WORKDIR /usr/src/myapp
COPY . .
RUN cargo install --path .

FROM debian:bullseye-slim
RUN apt-get update && apt-get install -y extra-runtime-dependencies && rm -rf /var/lib/apt/lists/*
COPY --from=builder /usr/local/cargo/bin/myapp /usr/local/bin/myapp
CMD ["myapp"]

注意:某些共享库可能需要按照上述 extra-runtime-dependencies 行的安装所示进行安装。

此方法将创建一个小于 200MB 的图像。如果您切换到使用基于 Alpine 的 Rust 图像,您可能能够再节省 60MB。

有关更多信息,请参阅 https://docs.docker.com/develop/develop-images/multistage-build/ 。

在 Docker 容器内编译您的应用程序

在某些情况下,在容器内运行您的应用程序可能并不合适。若要在 Docker 实例内编译但不运行您的应用程序,您可以编写如下内容:

$ docker run --rm --user "$(id -u)":"$(id -g)" -v "$PWD":/usr/src/myapp -w /usr/src/myapp rust:1.23.0 cargo build --release

这会将您当前的目录作为一个卷添加到容器中,将工作目录设置为该卷,并运行命令 cargo build --release 。这告诉 Rust 的构建系统 Cargo 在 myapp 中编译板条箱,并将可执行文件输出到 target/release/myapp

图像变体

rust 图像有多种类型,每种都针对特定的用例而设计。

rust:<version>

这是事实上的映像。如果您不确定自己的需求是什么,您可能想要使用这个。它被设计为既可以用作一次性容器(挂载您的源代码并启动容器以启动您的应用程序),也可以作为构建其他映像的基础。

其中一些标签的名称可能包含诸如“书虫”或“靶心”之类的名称。这些是 Debian 发行版的套件代号,表明该映像基于哪个发行版。如果您的映像需要安装除映像自带的软件包之外的任何其他软件包,您可能需要明确指定其中之一,以在 Debian 有新发行版时最大程度地减少损坏。

此标签基于 buildpack-depsbuildpack-deps 是为在其系统上有许多镜像的 Docker 普通用户设计的。按设计,它具有大量极为常见的 Debian 软件包。这减少了从其派生的镜像需要安装的软件包数量,从而减小了系统上所有镜像的总体大小。

rust:<version>-slim

此图像不包含默认标签中包含的常见软件包,仅包含运行 rust 所需的最小软件包。除非您在仅会部署 rust 图像且存在空间限制的环境中工作,否则我们强烈建议使用此存储库的默认图像。

rust:<version>-alpine

此图像基于流行的 Alpine Linux 项目,可在 alpine 官方镜像中获取。Alpine Linux 比大多数发行版基础镜像(约 5MB)小得多,因此总体上会生成更精简的镜像。

当您首要关注的是最终图像大小尽可能小的时候,此变体是有用的。需要注意的主要警告是,它确实使用 musl libc 而不是 glibc 及相关库,因此软件往往会根据其对 libc 要求/假设的深度而遇到问题。有关可能出现的问题以及使用基于 Alpine 的图像的一些利弊比较的更多讨论,请参阅此 Hacker News 评论线程。

为尽量减小镜像大小,在基于 Alpine 的镜像中通常不会包含其他相关工具(例如 gitbash )。以该镜像为基础,在您自己的 Dockerfile 中添加您需要的内容(如果您不熟悉如何安装软件包,请参阅 alpine 镜像说明中的示例)。

许可证

查看此映像中所包含软件的许可证信息。

与所有 Docker 镜像一样,这些镜像可能还包含其他可能受其他许可证约束的软件(例如来自基础发行版的 Bash 等,以及所包含的主要软件的任何直接或间接依赖项)。

一些能够自动检测到的额外许可信息可能会在 repo-info 存储库的 rust/ 目录中找到。

对于任何预构建图像的使用,图像用户有责任确保对此图像的任何使用都符合其中包含的所有软件的任何相关许可。