如何通过CI/CD将docker-compose构建的镜像推送至GitLab Registry
推送docker-compose关联镜像到GitLab Registry操作指南
前置准备
- 确保你的GitLab项目已开启Registry功能
- 将本地
docker-compose.yml中自定义镜像的命名规则调整为GitLab Registry标准格式:registry.gitlab.com/<用户名>/<项目名>/<镜像名>:<标签>,若使用官方未修改的Postgres镜像可跳过Postgres镜像的命名调整和推送步骤 - 提前生成GitLab个人访问令牌,勾选
read_registry和write_registry权限,在项目「设置」-「CI/CD」-「变量」中新增CI_REGISTRY_USER(你的GitLab用户名)、CI_REGISTRY_PASSWORD(刚生成的访问令牌)两个变量,变量类型设置为普通变量即可
CI配置文件编写
在项目根目录新建.gitlab-ci.yml文件,参考配置如下:
stages: - build-push build-and-push-images: stage: build-push image: docker:latest services: - docker:dind variables: DOCKER_HOST: tcp://docker:2376 DOCKER_TLS_CERTDIR: "/certs" API_IMAGE_NAME: $CI_REGISTRY_IMAGE/api:latest # 不需要推送自定义Postgres镜像可删除下行 POSTGRES_IMAGE_NAME: $CI_REGISTRY_IMAGE/postgres:latest before_script: - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY script: # 基于docker-compose构建所有镜像 - docker-compose build # 给API镜像打GitLab Registry标签,替换<>内容为你本地构建的API镜像名和标签 - docker tag <本地API镜像名>:<本地标签> $API_IMAGE_NAME # 不需要推送自定义Postgres镜像可删除下行,替换<>内容为你本地构建的Postgres镜像名和标签 - docker tag <本地Postgres镜像名>:<本地标签> $POSTGRES_IMAGE_NAME # 推送镜像 - docker push $API_IMAGE_NAME # 不需要推送自定义Postgres镜像可删除下行 - docker push $POSTGRES_IMAGE_NAME only: # 按需调整触发构建的分支规则 - main
注意事项
- 仅当你对官方Postgres镜像做了定制修改(比如导入初始化SQL、修改默认配置)时才需要推送该镜像,否则后续部署环节直接拉取官方镜像即可,减少冗余操作
- 提交
.gitlab-ci.yml到对应分支后,GitLab会自动触发CI流水线,执行镜像构建和推送操作,可在项目「CI/CD」-「流水线」中查看执行状态 - 后续部署环境拉取私有Registry镜像前,需要提前在部署环境执行
docker login registry.gitlab.com完成认证
内容的提问来源于stack exchange,提问作者Shaheel_Azhar
相关产品推荐
相关产品推荐

