在这篇文章中,我描述了在无法提供任何层缓存的无服务器主机上构建时,我如何提高容器的构建性能。我使用多阶段构建和远程存储库缓存的组合来避免重复性工作来提高性能。
阅读本篇,你将了解--target的使用和--cache-from的使用,更好理解多阶段构建和缓存的利用。我将会在文章末尾放置多阶段构建使用的本站链接
note
使用--target来构建多级建立的特定阶段,并推动这些镜像传输到远程存储库。在后续构建中,拉出这些镜像并使用作为构建缓存--cache-from
我们先来看,一个普通的构建脚本
## 镜像版本号
DOCKER_IMAGE_VERSION=20190305_addpjp
## 构建镜像
docker build \
-t marksugar/test:$DOCKER_IMAGE_VERSION \
-t marksugar/test:latest \
-f "./Dockerfile" \
"."
## 推送到仓库
docker push marksugar/test:$DOCKER_IMAGE_VERSION
docker push marksugar/test:latest
此bash脚本基于Dockerfile构建docker镜像,使用特定的版本号$DOCKER_IMAGE_VERSION和latest标记镜像tag,而后推送到仓库中,完成构建过程。
事实上我们在实际生产中的构建脚本远比这要复杂的多。为此,学习利用--target和--cache-from能提高时间效益
I. --target
创建多阶段构建时候,可以为每个构建阶段提供名称,例如,我此刻命名的createfile和linuxea,分别在(准备阶段createfile和最终阶段linuxea):
FROM marksugar/alpine:3.9-time-gosu as createfile
MAINTAINER www.linuxea.com
LABEL maintainer="www.linuxea.com"
RUN mkdir /data/ && touch /hello.txt
WORKDIR /data
FROM marksugar/go:alpine-go1.12 as linuxea
MAINTAINER www.linuxea.com
LABEL maintainer="www.linuxea.com"
COPY linuxea.go /data/linuxea.go
WORKDIR /data
CMD ["go&#