我有一个用于准备 Docker 映像的脚本。我在 Dockerfile 中有这个:
COPY my_script /
RUN bash -c "/my_script"
Run Code Online (Sandbox Code Playgroud)
该my_script文件包含我不希望出现在图像中的秘密(完成后它会自行删除)。
问题是尽管被删除了文件仍然保留在图像中,因为 COPY 是一个单独的层。我需要的是 COPY 和 RUN 影响同一层。
如何复制和运行脚本以便两个操作都影响同一层?
看看多阶段:
\n\n使用多阶段构建
\n\n\n\n\n通过多阶段构建,您可以在 Dockerfile 中使用多个 FROM 语句。每个 FROM 指令都可以使用不同的基址,并且每个指令都开始构建的新阶段。您可以有选择地将工件从一个阶段复制到另一个阶段,从而在最终图像中留下您不想要的所有内容。为了展示其工作原理,让\xe2\x80\x99s 调整上一节中的 Dockerfile 以使用多阶段构建。
\n
Dockerfile:
\n\nFROM golang:1.7.3\nWORKDIR /go/src/github.com/alexellis/href-counter/\nRUN go get -d -v golang.org/x/net/html \nCOPY app.go .\nRUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o app .\n\nFROM alpine:latest \nRUN apk --no-cache add ca-certificates\nWORKDIR /root/\nCOPY --from=0 /go/src/github.com/alexellis/href-counter/app .\nCMD ["./app"] \nRun Code Online (Sandbox Code Playgroud)\n
从 18.09 开始,您可以docker build --secret在构建过程中使用机密信息。机密被安装到构建环境中,不会存储在最终映像中。
RUN --mount=type=secret,id=script,dst=/my_script \
bash -c /my_script
Run Code Online (Sandbox Code Playgroud)
$ docker build --secret id=script,src=my_script.sh
Run Code Online (Sandbox Code Playgroud)
该脚本不需要删除自身。
这可以通过 BuildKit 来处理:
# syntax=docker/dockerfile:experimental
FROM ...
RUN --mount=type=bind,target=/my_script,source=my_script,rw \
bash -c "/my_script"
Run Code Online (Sandbox Code Playgroud)
然后您将使用以下命令进行构建:
DOCKER_BUILDKIT=1 docker build -t my_image .
Run Code Online (Sandbox Code Playgroud)
这听起来也像是您正在尝试将秘密注入到构建中,例如从私人 git 存储库中提取。BuildKit 还允许您指定:
# syntax=docker/dockerfile:experimental
FROM ...
RUN --mount=type=secret,target=/creds,id=cred \
bash -c "/my_script -i /creds"
Run Code Online (Sandbox Code Playgroud)
然后您将使用以下命令进行构建:
DOCKER_BUILDKIT=1 docker build -t my_image --secret id=creds,src=./creds .
Run Code Online (Sandbox Code Playgroud)
对于这两个 BuildKit 选项, mount 命令实际上永远不会将文件添加到您的映像中。它仅使文件在该单个 RUN 步骤期间可用作绑定安装。只要该 RUN 步骤不将机密输出到映像中的另一个文件,该机密就永远不会注入到映像中。
有关 BuildKit 实验语法的更多信息,请参阅:https ://github.com/moby/buildkit/blob/master/frontend/dockerfile/docs/experimental.md
| 归档时间: |
|
| 查看次数: |
4228 次 |
| 最近记录: |