Skip to content

导出二进制文件

原文;https://docs.docker.com/build/guide/export/

您知道可以使用 Docker 构建您的应用程序为独立二进制文件吗?有时,您可能不想将应用程序打包并作为 Docker 镜像分发。使用 Docker 来构建您的应用程序,并使用导出器将输出保存到磁盘。

docker build 的默认输出格式是容器镜像。该镜像自动加载到您的本地镜像存储中,您可以从该镜像运行容器,或将其推送到注册表。在底层,这使用默认的导出器,称为 docker 导出器。

要将构建结果导出为文件,您可以使用 local 导出器。local 导出器将构建容器的文件系统保存到主机上的指定目录。

导出二进制文件

要使用 local 导出器,请向 docker build 命令传递 --output 选项。--output 标志接受一个参数:您希望保存文件的主机上的目的地。

以下命令将 server 目标的文件导出到主机文件系统的当前工作目录:

console
docker build --output=. --target=server .

运行此命令会在 ./bin/server 创建一个二进制文件。它被创建在 bin/ 目录下,因为这是文件在构建容器内的位置。

console
ls -l ./bin
total 14576
-rwxr-xr-x  1 user  user  7459368 Apr  6 09:27 server

如果您想创建一个导出两个二进制文件的构建,您可以在 Dockerfile 中创建另一个构建阶段,该阶段从每个构建阶段复制两个二进制文件:

diff
  # syntax=docker/dockerfile:1
  ARG GO_VERSION=1.21
  FROM golang:${GO_VERSION}-alpine AS base
  WORKDIR /src
  RUN --mount=type=cache,target=/go/pkg/mod/ \
      --mount=type=bind,source=go.sum,target=go.sum \
      --mount=type=bind,source=go.mod,target=go.mod \
      go mod download -x

  FROM base as build-client
  RUN --mount=type=cache,target=/go/pkg/mod/ \
      --mount=type=bind,target=. \
      go build -o /bin/client ./cmd/client

  FROM base as build-server
  ARG APP_VERSION="0.0.0+unknown"
  RUN --mount=type=cache,target=/go/pkg/mod/ \
      --mount=type=bind,target=. \
      go build -ldflags "-X main.version=$APP_VERSION" -o /bin/server ./cmd/server

  FROM scratch AS client
  COPY --from=build-client /bin/client /bin/
  ENTRYPOINT [ "/bin/client" ]

  FROM scratch AS server
  COPY --from=build-server /bin/server /bin/
  ENTRYPOINT [ "/bin/server" ]
+
+ FROM scratch AS binaries
+ COPY --from=build-client /bin/client /
+ COPY --from=build-server /bin/server /

现在您可以构建 binaries 目标,并使用 --output 选项导出客户端和服务器二进制文件。

console
docker build --output=bin --target=binaries .
ls -l ./bin
total 29392
-rwxr-xr-x  1 user  user  7581933 Apr  6 09:33 client
-rwxr-xr-x  1 user  user  7459368 Apr  6 09:33 server

总结

本节演示了如何使用 Docker 构建和导出独立二进制文件。这些二进制文件可以自由分发,不需要像 Docker 守护程序这样的容器运行时。

到目前为止,您生成的二进制文件是 Linux 二进制文件。

这是因为构建环境是 Linux。如果您的主机操作系统是 Linux,您可以运行这些文件。构建在 Mac 或 Windows 机器上运行的二进制文件需要跨平台编译。本指南后面部分将探讨这一点。

相关信息:

下一步

本指南的下一个主题是测试:如何使用 Docker 运行应用程序测试。