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

5 gitlab docker gitlab-ci docker-compose

我最近进入了 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 中的每个服务在它们自己的文件夹中都有一个构建上下文。

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

zyp*_*510 24

然而 .gitlab-ci.yml 仅提供对一张图像的支持

这不是真的。来自官方文档

您的图像将按照以下方案命名:

<registry URL>/<namespace>/<project>/<image>
Run Code Online (Sandbox Code Playgroud)

GitLab 最多支持三个级别的镜像存储库名称。以下图像标签示例是有效的:

registry.example.com/group/project:some-tag
registry.example.com/group/project/image:latest
registry.example.com/group/project/my/image:rc1
Run Code Online (Sandbox Code Playgroud)

因此,问题的解决方案很简单 - 只需构建单独的映像并将它们以不同的映像名称推送到 GitLab 容器注册表即可。


如果您想要一个示例,我的管道设置如下:

<registry URL>/<namespace>/<project>/<image>
Run Code Online (Sandbox Code Playgroud)

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


emi*_*mix 0

您不需要dind运行 docker-compose 堆栈。您可以运行多个docker-compose up命令。

acceptance_testing:
  stage: test
  before_script:
    - docker-compose -p $CI_JOB_ID up -d
  script:
    - docker-compose -p $CI_JOB_ID exec -T /run/your/test/suite.sh
  after_script:
    - docker-compose -p $CI_JOB_ID down -v --remove-orphans || true
Run Code Online (Sandbox Code Playgroud)