首页 > 解决方案 > Docker pull - 从 Gitlab CI 构建并推送到 Heroku

问题描述

我在 Docker 容器中的 Heroku 上运行 Django 应用程序。(容器是安装几个额外驱动程序所必需的。)我正在将来自 gitlab CI 的图像推送到一个gitlab-ci.yml文件中。我的问题是构建图像需要一段时间。那是因为 gitlab 没有图像的缓存。当我首先从 Heroku 中提取图像时,似乎它被 gitlab 忽略了。我的.gitlab-ci.yml文件如下所示:

image: docker:latest
services:
  - docker:dind

variables:
  DOCKER_DRIVER: overlay

stages:
  - build

docker-build:
  stage: build
  script:
  - docker login -u _ -p $HEROKU_TOKEN registry.heroku.com 
  - docker pull registry.heroku.com/xxx/web
  - docker build . -f Dockerfile --iidfile imageid.txt -t registry.heroku.com/xxx/web 
  - docker push registry.heroku.com/xxx/web

代码运行良好,但构建只需要一段时间,因为它没有缓存。谁能帮我加快部署速度?谢谢!

标签: dockerbuildgitlabpushpull

解决方案


根据您的 Gitlab 设置,Ci 运行器可以直接在主机或分布式环境中运行。在后一种情况下,Gitlab 文档提到在构建 docker 映像时使用 —from-cache 选项: https ://docs.gitlab.com/ee/ci/docker/using_docker_build.html#using-docker-caching

本质上,它将从 Heroku docker 注册表中提取正在构建的最新版本的镜像,并使用它来构建仅在更新镜像上发生更改的层。

为了更新 docker registry 上的最新标签并在下一次构建中使用最新的镜像版本作为缓存,您可以在将构建的镜像推送回镜像仓库之前使用其版本和“最新”标签。


推荐阅读