导出Binaries
您知道吗,您可以使用 Docker 将应用程序构建为独立应用程序 Binaries?有时,您不想打包和分发应用程序 作为 Docker 镜像。使用 Docker 构建您的应用程序,并使用导出器来 将输出保存到磁盘。
的默认输出格式docker build
是容器镜像。那个形象是
自动加载到本地镜像存储,您可以在其中运行容器
或将其推送到注册表。在后台,这会使用默认的
exporter 调用,称为docker
出口商。
要将构建结果导出为文件,您可以使用--output
旗
或-o
简称。这--output
flag 允许您更改
你的版本。
从构建中导出Binaries
如果指定docker build --output
flag, Docker 导出
将生成容器的内容设置为指定的
location 在主机的文件系统上。这将使用local
exporter 的
这样做的巧妙之处在于,您可以使用 Docker 强大的隔离和 构建功能以创建独立的Binaries。这 适用于 Go、Rust 和其他可以编译为单个 二元的。
下面的示例创建一个简单的 Rust 程序,该程序打印 “Hello, World!“,并将Binaries导出到主机文件系统。
为此示例创建一个新目录,并导航到该目录:
$ mkdir hello-world-bin $ cd hello-world-bin
创建包含以下内容的 Dockerfile:
# syntax=docker/dockerfile:1 FROM rust:alpine AS build WORKDIR /src COPY <<EOT hello.rs fn main() { println!("Hello World!"); } EOT RUN rustc -o /bin/hello hello.rs FROM scratch COPY --from=build /bin/hello / ENTRYPOINT ["/hello"]
提示
这
COPY <<EOT
syntax 是一个 here-document。 它允许您在 Dockerfile 中编写多行字符串。这里用于 在 Dockerfile 中内联创建一个简单的 Rust 程序。此 Dockerfile 使用多阶段构建来编译第一个 阶段,然后在第二个阶段将Binaries复制到暂存镜像。这 Final Image 是仅包含Binaries的最小 Image。此用例 对于
scratch
image 通常用于为 不需要完整作系统即可运行的程序。构建 Dockerfile 并将Binaries导出到当前工作目录:
$ docker build --output=. .
此命令构建 Dockerfile 并将Binaries导出到当前 working 目录中。Binaries名为
hello
,它是在 当前工作目录。
导出多平台构建
您可以使用local
exporter 导出Binaries,以将Binaries与多平台版本结合使用。这让您
一次编译多个Binaries,这些Binaries可以在任何
架构,前提是编译器支持目标平台
你用。
继续 Export binaries from a build 部分中的示例 Dockerfile:
# syntax=docker/dockerfile:1
FROM rust:alpine AS build
WORKDIR /src
COPY <<EOT hello.rs
fn main() {
println!("Hello World!");
}
EOT
RUN rustc -o /bin/hello hello.rs
FROM scratch
COPY --from=build /bin/hello /
ENTRYPOINT ["/hello"]
您可以使用--platform
flag 替换为docker build
命令。与--output
旗
该版本将每个目标的Binaries导出到指定目录。
例如,要为两者构建程序linux/amd64
和linux/arm64
:
$ docker build --platform=linux/amd64,linux/arm64 --output=out .
$ tree out/
out/
├── linux_amd64
│ └── hello
└── linux_arm64
└── hello
3 directories, 2 files
其他信息:
除了local
exporter,还有其他可用的导出器。自
要了解有关可用导出器及其使用方法的更多信息,请参阅 Exporters 文档。