docker - 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
代码运行良好,但构建只需要一段时间,因为它没有缓存。谁能帮我加快部署速度?谢谢!
解决方案
根据您的 Gitlab 设置,Ci 运行器可以直接在主机或分布式环境中运行。在后一种情况下,Gitlab 文档提到在构建 docker 映像时使用 —from-cache 选项: https ://docs.gitlab.com/ee/ci/docker/using_docker_build.html#using-docker-caching
本质上,它将从 Heroku docker 注册表中提取正在构建的最新版本的镜像,并使用它来构建仅在更新镜像上发生更改的层。
为了更新 docker registry 上的最新标签并在下一次构建中使用最新的镜像版本作为缓存,您可以在将构建的镜像推送回镜像仓库之前使用其版本和“最新”标签。
推荐阅读
- arduino - 从 URL 读取 GET 请求值到 Arduino WebServer
- linq - Azure SQL 性能优化 - 如何找到运行“最严重违规者”查询的代码?
- javascript - React Google maps API initMap 不是函数,没有包
- go - Golang 不能使用类型作为参数类型
- php - 添加自定义文本字段,存储它们的值并在 Woocommerce 产品页面上显示它们
- identityserver4 - 在网络场中运行 IdentityServer4 的提示
- terraform - Terraform 文字未终止
- ruby-on-rails - 在rails中分解此代码的最佳方法是什么
- android-fragments - 如何在片段中实现 GlideApp?
- python - 将 GROUP BY 结果附加到原始表中