加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 建站 > 正文

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

发布时间:2020-10-02 16:36:04 所属栏目:建站 来源:网络整理
导读:多阶段构建是一项新成果,必要保卫措施和客户端上行使Docker 17.05或更高版本。多级构建对付在优化Dockerfile的同时使其易于阅读和维护的任何人都很是有效。 在举办多阶段构建之前 关于构建镜像,最具挑衅性的工作之一是保持镜像尺寸变

多阶段构建是一项新成果,必要保卫措施和客户端上行使Docker 17.05或更高版本。多级构建对付在优化Dockerfile的同时使其易于阅读和维护的任何人都很是有效。

在举办多阶段构建之前

关于构建镜像,最具挑衅性的工作之一是保持镜像尺寸变小。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 .

最终功效是与之前的镜像巨细沟通,并大大低落了伟大性。您无需建设任何中间映像,也不必要将任何工件提取到当地体系。

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读