Docker 缓存
docker:cache
构建一个 Docker
镜像作为缓存,在未来的构建中重复使用。
可以避免网络资源如 依赖包
重复下载。
# 适用事件
# 参数
# dockerfile
- type:
String
- required:
true
用于构建缓存镜像的 Dockerfile 路径。
为避免超长时间构建,Docker 镜像构建超时时间受 job.timeout 参数控制。
# by
- type:
Array<String>
|String
- required:
false
用来声明缓存镜像构建过程中依赖的文件列表。注意:未出现在 by
列表中的文件,除了 Dockerfile,其他在构建镜像过程中,都当不存在处理。
- 支持数组格式
- 支持字符串格式,多个文件用英文逗号分隔。
# versionBy
- type:
Array<String>
|String
- required:
false
用来进行版本控制,未传入 versionBy
,则默认取 by
的值进行版本控制。
versionBy
所指向的文件内容发生变化,我们就会认为是一个新的版本,
具体的计算逻辑见这个表达式:sha1(Dockerfile + versionBy + buildArgs + target + arch)。
- 支持数组格式。
- 支持字符串格式,多个文件用英文逗号分隔。
# buildArgs
- type:
Object
- required:
false
在 build 时插入额外的构建参数 (--build-arg $key=$value
), value 值为 null 时只加入 key (--build-arg $key
)。
# target
- type:
String
- required:
false
对应 docker build 中的 --target 参数,可以选择性地构建 Dockerfile 中的特定阶段,而不是构建整个 Dockerfile。
# sync
- type:
Boolean
- required:
false
- default:
false
是否同步模式,等待缓存镜像 docker push
成功后才继续。
# ignoreBuildArgsInVersion
- type:
Boolean
- required:
false
- default:
false
版本计算是否忽略 buildArgs
。
详见版本控制
# 输出结果
{
// 缓存对应的 docker image name
name
}
# 配置样例
main:
push:
- docker:
image: node:14
stages:
- name: build cache image
type: docker:cache
options:
dockerfile: cache.dockerfile
# by 支持以下两种形式:数组、字符串
by:
- package.json
- package-lock.json
# versionBy: package-lock.json
versionBy:
- package-lock.json
exports:
name: DOCKER_CACHE_IMAGE_NAME
- name: use cache
image: $DOCKER_CACHE_IMAGE_NAME
# 将 cache 中的文件拷贝过来使用
commands:
- cp -r "$NODE_PATH" ./node_modules
- name: build with cache
script:
- npm run build
其中,cache.dockerfile
是一个用于构建缓存镜像的 Dockerfile。示例:
# 选择一个 Base 镜像
FROM node:14
# 设置工作目录
WORKDIR /space
# 将 by 中的文件列表 COPY 过来
COPY . .
# 根据 COPY 过来的文件进行依赖的安装
RUN npm ci
# 设置好需要的环境变量
ENV NODE_PATH=/space/node_modules
await →