跨机器使用 Docker 构建的缓存
2020 12 1 01:44 PM 525次查看
docker build
过的镜像,另一台机器上却需要重新构建,没法利用缓存。查了一番文档后,我发现
docker build
还能使用外部缓存来加速构建。要使用外部缓存的话,需要先启用 BuildKit:
export DOCKER_BUILDKIT=1
然后在构建时指定
BUILDKIT_INLINE_CACHE=1
参数,这样构建的镜像会带上缓存的元数据;再将其推到仓库就可以供其他机器使用了:docker build -t myname/myapp --build-arg BUILDKIT_INLINE_CACHE=1 .
docker push myname/myapp
最后在另一台机器上,使用
--cache-from
指定缓存所在的镜像名,就能用这个镜像的缓存来加速构建了:docker build --cache-from myname/myapp .
注:如果依赖多个镜像的话,--cache-from
可以多次指定不同的镜像名。不过,使用外部缓存构建会比内部缓存慢一些,所以没用到多机器构建时,还是用内部缓存比较好。
此外,因为在写
gitlab-ci.yml
时,并不能区分哪台机器是第一次构建的,所以这两个构建的参数需要融合在一起:export DOCKER_BUILDKIT=1
docker pull myname/myapp || true # 有可能是第一次构建,pull 会失败,所以用 true 忽略错误
docker build -t myname/myapp --cache-from myname/myapp --build-arg BUILDKIT_INLINE_CACHE=1 . # 构建 myname/myapp,并指定使用外部 myname/myapp 的缓存
docker push myname/myapp
最后,这样生成的镜像会带有额外的数据,一般不应该直接部署到生成环境,而应该作为中间镜像使用。
向下滚动可载入更多评论,或者点这里禁止自动加载。