gpt4 book ai didi

docker - 如何将 docker-compose 所需的多个图像推送到 GitLab CI 中的 GitLab 注册表?

转载 作者:行者123 更新时间:2023-12-02 04:29:12 25 4
gpt4 key购买 nike

我最近进入了 CI/CD,对我来说一个很好的起点是 GitLab,因为它们为此提供了一个简单的界面,我开始了解管道和阶段是什么,但我遇到了一些关于 GitLab CI 的矛盾想法在 Docker 上运行。

我的应用程序在 Docker Compose 上运行。它包含(等等),可以轻松构建和运行容器。 Docker Compose 中的每个服务都创建了一个 Docker 容器,除了 php-fpm 一个,它能够完成称为“水平扩展”的事情,因此我可以稍后对其进行扩展。

我将使用 Docker Compose 进行生产,我目前正在开发中使用它,我也想在 CI/CD 管道中使用它。

但是 .gitlab-ci.yml 只支持一个镜像,所以我必须构建它并将它推送到他们的 GitLab Registry 或 Docker Hub,以便稍后在 CI/CD 过程中提取它。

如何将 Docker Compose 的服务构建为单个镜像,以便将其推送到注册表/Docker,以便将其拉入 CI/CD?

我的项目包含一个 docker 文件夹和一个 docker-compose.yml。在 docker 文件夹中,每个服务都有自己独立的目录(php-fpm、nginx、mysql 等),每个服务(自己准备)都包含一个包含构建细节的 Dockerfile,尤其是 php-fpm 一个(deps 和 libs 很强)用这个)

docker-compose.yml 中的每个服务在它们自己的文件夹中都有一个构建上下文。

如果我不清楚,我可以提供其他信息。

最佳答案

However the .gitlab-ci.yml provides support for only one image



这不是真的。来自 official documentation :

Your image will be named after the following scheme:

<registry URL>/<namespace>/<project>/<image>

GitLab supports up to three levels of image repository names. Following examples of image tags are valid:

registry.example.com/group/project:some-tag
registry.example.com/group/project/image:latest
registry.example.com/group/project/my/image:rc1


因此,您的问题的解决方案很简单 - 只需构建单个图像并将它们以不同的图像名称推送到 GitLab 容器注册表。以下配置应该给你一个想法:

.template: &build_template
image: docker:stable
services:
- docker:dind
before_script:
- docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
script:
- docker pull $CI_REGISTRY_IMAGE/$IMAGE_NAME:latest || true
- if [ -z ${CI_COMMIT_TAG+x} ];
then docker build
--cache-from $CI_REGISTRY_IMAGE/$IMAGE_NAME:latest
--file $DOCKERFILE_NAME
--tag $CI_REGISTRY_IMAGE/$IMAGE_NAME:$CI_COMMIT_SHA
--tag $CI_REGISTRY_IMAGE/$IMAGE_NAME:$CI_COMMIT_TAG
--tag $CI_REGISTRY_IMAGE/$IMAGE_NAME:latest . ;
else docker build
--cache-from $CI_REGISTRY_IMAGE/$IMAGE_NAME:latest
--file $DOCKERFILE_NAME
--tag $CI_REGISTRY_IMAGE/$IMAGE_NAME:$CI_COMMIT_SHA
--tag $CI_REGISTRY_IMAGE/$IMAGE_NAME:latest . ;
fi
- docker push $CI_REGISTRY_IMAGE/$IMAGE_NAME:$CI_COMMIT_SHA
- if [ -z ${CI_COMMIT_TAG+x} ]; then
docker push $CI_REGISTRY_IMAGE/$IMAGE_NAME:$CI_COMMIT_TAG;
fi
- docker push $CI_REGISTRY_IMAGE/$IMAGE_NAME:latest

build:image1:
<<: *build_template
variables:
IMAGE_NAME: image1
DOCKERFILE_NAME: Dockerfile.1

build:image2:
<<: *build_template
variables:
IMAGE_NAME: image2
DOCKERFILE_NAME: Dockerfile.2

你应该能够使用 $CI_REGISTRY_IMAGE/$IMAGE_NAME:$CI_COMMIT_SHA 拉出相同的图像在以后的管道作业或您的撰写文件中(前提是将变量传递到您运行撰写文件的位置)。

关于docker - 如何将 docker-compose 所需的多个图像推送到 GitLab CI 中的 GitLab 注册表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50637641/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com