Dockerfile 中的 multi-stage(多阶段构建)
发布时间:2020-12-16 03:56:55 所属栏目:安全 来源:网络整理
导读:分别为软件的编译环境和运行环境提供不同的容器镜像 。比如为编译环境提供一个 Dockerfile.build,用它构建的镜像包含了编译软件需要的所有内容,比如代码、SDK、工具等等。同时为软件的运行环境提供另外一个单独的 Dockerfile,它从 Dockerfile.build 中获
分别为软件的编译环境和运行环境提供不同的容器镜像。比如为编译环境提供一个 Dockerfile.build,用它构建的镜像包含了编译软件需要的所有内容,比如代码、SDK、工具等等。同时为软件的运行环境提供另外一个单独的 Dockerfile,它从 Dockerfile.build 中获得编译好的软件,用它构建的镜像只包含运行软件所必须的内容。这种情况被称为构造者模式(builder pattern),本文将介绍如何通过 Dockerfile 中的 multi-stage 来解决构造者模式带来的问题。
golang:1.7.3
CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o app .
["./app"]
#!/bin/
Building sparkdevo/href-
docker build --no-cache -t sparkdevo/href-counter:build . -
docker create --name extract sparkdevo/href-
docker extract:/go/src/github.com/sparkdevo/href-counter/app ./ -<span style="color: #0000ff">echo Building sparkdevo/href-<span style="color: #000000">counter:latest
<span style="font-family: Microsoft YaHei">构建运行应用程序的镜像docker build --no-cache -t sparkdevo/href-counter:latest .
用于生产环境的容器镜像只有 10.3 M,这样的大小在网络间传输的效率是很高的。
$ docker run -e url=https:
$ docker run -e url=http:
采用上面的构建过程,我们需要维护两个 Dockerfile 文件和一个脚本文件 build.sh。能不能简化一些呢? 下面我们看看 docker 针对这种情况提供的解决方案:multi-stage。
golang:1.7.3
CGO_ENABLED=0<span style="color: #008080">FROM<span style="color: #000000"> alpine:latest
<span style="color: #008080">RUN<span style="color: #000000"> apk --no-cache add ca-certificates <span style="color: #008080">WORKDIR<span style="color: #000000"> /root/ <span style="color: #008080">COPY --from=0<span style="color: #000000"> /go/src/github.com/sparkdevo/href-counter/app . <span style="color: #008080">CMD ["./app"]
$ docker build --no-cache -t sparkdevo/href-counter:multi . -f Dockerfile.multi
$ docker run -e url=https:
$ docker run -e url=http:
golang:1.7.3 as builder
CGO_ENABLED=0<span style="color: #008080">FROM<span style="color: #000000"> alpine:latest
<span style="color: #008080">RUN<span style="color: #000000"> apk --no-cache add ca-certificates <span style="color: #008080">WORKDIR<span style="color: #000000"> /root/ <span style="color: #008080">COPY<span style="color: #000000"><span style="color: #ff0000"> --from=builder /go/src/github.com/sparkdevo/href-counter/app . <span style="color: #008080">CMD ["./app"]
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |