资讯

精准传达 • 有效沟通

从品牌网站建设到网络营销策划,从策略到执行的一站式服务

云计算核心技术Docker教程:Docker多阶段构建

多阶段构建是一项新功能,需要守护程序和客户端上使用Docker 17.05或更高版本。多级构建对于在优化Dockerfile的同时使其易于阅读和维护的任何人都非常有用。

10余年的海北州网站建设经验,针对设计、前端、开发、售后、文案、推广等六对一服务,响应快,48小时及时工作处理。网络营销推广的优势是能够根据用户设备显示端的尺寸不同,自动调整海北州建站的显示方式,使网站能够适用不同显示终端,在浏览器中调整网站的宽度,无论在任何一种浏览器上浏览网站,都能展现优雅布局与设计,从而大程度地提升浏览体验。创新互联建站从事“海北州网站设计”,“海北州网站推广”以来,每个客户项目都认真落实执行。

在进行多阶段构建之前

关于构建镜像,最具挑战性的事情之一是保持镜像尺寸变小。Dockerfile中的每条指令都会在映像上添加一层,您需要记住在移至下一层之前清除不需要的任何工件。为了编写一个真正有效的Dockerfile,传统上,您需要使用Shell技巧和其他逻辑来使各层尽可能小,并确保每一层都具有上一层所需的工件,而没有其他任何东西。

实际上,通常只有一个Dockerfile用于开发(包含构建应用程序所需的一切),而精简的Dockerfile用于生产时,仅包含您的应用程序以及运行该应用程序所需的内容。这被称为“构建器模式”。维护两个Dockerfile是不理想的。

这是一个Dockerfile.build和Dockerfile的例子,它遵循上面的模式:

Dockerfile.build:

FROM golang:1.7.3

WORKDIR /go/src/github.com/alexellis/href-counter/

COPY app.go .

RUN go get -d -v golang.org/x/net/html \\

&& CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o app .

请注意,此示例还RUN使用Bash&&运算符将两个命令人工压缩在一起,以避免在镜像中创建额外的图层。这是容易失败的并且难以维护。

Dockerfile:

FROM alpine:latest

RUN apk --no-cache add ca-certificates

WORKDIR /root/

COPY app .

CMD [./app]

build.sh:

#!/bin/sh

echo Building alexellis2/href-counter:build

docker build --build-arg https_proxy=$https_proxy --build-arg http_proxy=$http_proxy \\

-t alexellis2/href-counter:build . -f Dockerfile.build

docker container create --name extract alexellis2/href-counter:build

docker container cp extract:/go/src/github.com/alexellis/href-counter/app ./app

docker container rm -f extract

echo Building alexellis2/href-counter:latest

docker build --no-cache -t alexellis2/href-counter:latest .

rm ./app

运行build.sh脚本时,它需要构建第一个镜像,从中创建一个容器以复制工件,然后构建第二个镜像。这两个映像都占用了系统空间,并且app 本地磁盘上也仍然有工件。

多阶段构建极大地简化了这种情况!

使用多阶段构建

通过多阶段构建,您可以FROM在Dockerfile中使用多个语句。每个FROM指令可以使用不同的基础,并且每个指令都

开始构建的新阶段。您可以有选择地将工件从一个阶段复制到另一个阶段,从而在最终图像中留下不需要的所有内

容。为了展示它是如何工作的,让我们改编上一部分中的Dockerfile以使用多阶段构建。

Dockerfile:

FROM golang:1.7.3

WORKDIR /go/src/github.com/alexellis/href-counter/

RUN go get -d -v golang.org/x/net/html

COPY app.go .

RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o app .

FROM alpine:latest

RUN apk --no-cache add ca-certificates

WORKDIR /root/

COPY --from=0 /go/src/github.com/alexellis/href-counter/app .

CMD [./app]

您只需要单个Dockerfile。您也不需要单独的构建脚本。只需运行docker build:

$ docker build -t alexellis2/href-counter:latest .

最终结果是与之前的镜像大小相同,并大大降低了复杂性。您无需创建任何中间映像,也不需要将任何工件提取到本地系统。


分享文章:云计算核心技术Docker教程:Docker多阶段构建
路径分享:http://cdkjz.cn/article/cpgpoe.html
多年建站经验

多一份参考,总有益处

联系快上网,免费获得专属《策划方案》及报价

咨询相关问题或预约面谈,可以通过以下方式与我们联系

大客户专线   成都:13518219792   座机:028-86922220