关于性能:Gitlab CI / CD,Docker Compose和应用程序

Gitlab CI/CD, Docker Compose and the app

我有个问题要问你。

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

我的应用程序在Docker Compose上运行。它包含(blah blah),使构建和运行容器变得容易。docker compose中的每一个服务都创建一个docker容器,除了php fpm容器,它可以做一个叫做"水平比例"的事情,所以我可以稍后对其进行缩放。

我将使用docker compose进行生产,我目前正在开发中使用它,我也希望在CI/CD管道中使用它。

但是.gitlab-ci.yml只支持一个映像,因此我必须构建它并将其推送到其Gitlab注册表或Docker集线器,以便在稍后的CI/CD过程中提取它。

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

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

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

如果我不清楚,我可以提供额外的信息(免费)


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

1
2
3
4
5
6
7
8
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


我想你在找类似的东西

1
2
3
4
5
6
7
8
9
10
11
12
# .gitlab-ci.yml

image: docker

services:
  - docker:dind

build:
  script:
    - apk add --no-cache py-pip
    - pip install docker-compose
    - docker-compose up -d

也很高兴知道:

  • 在Docker中,容器和图像有什么区别?
  • 用Gitlab CI/CD构建Docker图像