Dockerfile多阶段构建
Docker 17.05版本以后,新增了Dockerfile多阶段构建。所谓多阶段构建,实际上是允许一个Dockerfile 中出现多个 FROM 指令。但最后生成的镜像,仍以最后一条 FROM 为准,之前的 FROM 会被抛弃。
1
FROM [--platform=<platform>] <image> [AS <name>]
Copied!
例如我们构建一个golang程序,需要用到go语言的编译环境,但把go语言的编译工具和库写到镜像里会十分浪费空间,这时候就可以用到多阶段构建,例如:
1
# 编译阶段 命名为 base
2
FROM golang:1.7.3 as base
3
COPY app.go .
4
RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o app .
5
# 运行阶段
6
FROM alpine:latest
7
RUN apk --no-cache add ca-certificates
8
WORKDIR /root/
9
COPY --from=base /go/src/app .
10
CMD ["./app"]
Copied!
使用外部镜像作为stage
使用多阶段构建时,不仅可以从Dockerfile中创建的镜像中进行复制,还可以使用COPY –from指令从单独的image中复制,使用本地image名称,本地或Docker注册表中可用的标记或标记ID。 例如:
1
COPY --from=nginx:latest /etc/nginx/nginx.conf /usr/local/nginx/nginx.conf
Copied!
Last modified 1yr ago
Copy link