gpt4 book ai didi

docker - 如何调用 docker build 一次以创建三个单独的目标

转载 作者:行者123 更新时间:2023-12-02 20:54:05 24 4
gpt4 key购买 nike

我创建了一个方便的 bash 脚本来直接从存储库创建多个目标。
构建.sh

#/bin/bash
DOCKERBIN=docker
PROJECTNAME=my-favorite-project
ORG=myorg
REPO=git@github.com:$ORG/$PROJECTNAME.git
"$DOCKERBIN" build --rm=false --target docserver -t "$ORG/$PROJECTNAME-docs" "$REPO"
"$DOCKERBIN" build --rm=false --target demo -t "$ORG/$PROJECTNAME" "$REPO"
"$DOCKERBIN" build --target dashboard -t "$ORG/$PROJECTNAME-dashboard" "$REPO"
如您所见,从同一个存储库中生成了三个不同的目标。 git 存储库基目录中的 Dockerfile 使用 Docker 的使用 multistage-build能够使用创建三个独立图像的单个通用基础构建器。我用过 --no-rm尝试加快构建速度,但我真正想做的是发出一个 docker 命令来创建所有三个标记图像。我尝试交错 --target-t参数,但不幸的结果是它执行了整个构建三遍,并将所有三个标签应用于最后构建的目标。
有一个更好的方法吗?

最佳答案

docker build总是只构建一个图像。如果需要取出三张图片,则需要运行 docker build如你所示的三倍。
如果您需要构建三个独立的镜像,我建议使用三个单独的 Dockerfile,而不是试图强制 Docker 只运行多阶段构建的某些阶段。如果有需要重复的公共(public)部分,并且无论如何都有这样的脚本,则可以考虑添加第四个 Dockerfile 来构建公共(public)部分。
例如,假设您需要为您构建的每个镜像添加自定义 TLS CA 根证书,并且您已将 Ubuntu 基础作为所有容器的标准。您可以为此构建一个通用的基础镜像

# projectname/Dockerfile.base
FROM ubuntu:18.04
RUN apt-get update \
&& DEBIAN_FRONTEND=noninteractive \
apt-get install --assume-yes --no-install-recommends \
ca-certificates
COPY local-root.crt /usr/local/share/ca-certificates
RUN update-ca-certificates
然后,您的每个组件 Dockerfile 可以将确切的图像名称作为 ARG ,并在 FROM 中使用它线:
# projectname/Dockerfile.dashboard
ARG base
FROM $base
RUN apt-get update \
&& DEBIAN_FRONTEND=noninteractive \
apt-get install --assume-yes --no-install-recommends \
nodejs
...
CMD ["./myapp"]
然后当你去构建它时,你需要告诉你的构建脚本首先构建基础镜像,然后是上面的镜像。
#!/bin/sh
# projectname/build-docker.sh
TAG=$(date +%Y%m%d.%H%M%S)
docker build -t "me/base:$TAG" -f Dockerfile.base .
docker build -t "me/dashboard:$TAG" -f Dockerfile.dashboard \
--build-arg "base=me/base:$TAG" .
docker push "me/dashboard:$TAG"
可能实现这一点只需将单个多阶段 Dockerfile 拆分为每个应用程序的单独 Dockerfile。 COPY --from=...选项可以通过名称引用另一个图像,如果你最终做了一些事情,比如构建需要复制到多个地方的静态 Assets 的图像。

关于docker - 如何调用 docker build 一次以创建三个单独的目标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63889307/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com