如何使用 Gitlab CI 构建、推送和拉取多个 docker 容器?

How to build, push and pull multiple docker containers with Gitlab CI?

我有一个 docker-compose 文件,它构建了两个容器,一个节点应用程序和一个 ngnix 服务器。现在我想在 Gitlab 运行ners 的帮助下在服务器上自动化构建和 运行 过程。我对 CI 相关的东西很陌生,所以请原谅我的做法:

我想在 gitlab.com 上创建多个存储库,并为每个存储库创建一个 Dockerfile。我现在是否必须将 gitlab-运行ner 实例与这些项目中的每一个相关联才能构建图像,将其推送到 docker 存储库并让服务器从那里提取它?然后我将不得不以某种方式将 docker-compose 文件推送到服务器上并从那里编写所有内容。

所以我的问题是:

  1. 我可以 运行 多个(2 或 3)gitlab-运行ner 用于一台服务器上的所有存储库吗?
  2. 我需要特定的还是共享的 运行ner,究竟有什么区别?
  3. 为什么所有教程都使用自托管 Gitlab 实例而不是仅使用 gitlab 存储库(难道不能将 gitlab-运行ner 与 gitlab.com 存储库一起使用吗?)
  4. 是否可以在 gitlab-运行ner 管道中使用 docker-compose 并一次构建所有内容?

首先,您显然可以在 https://gitlab.com 以及自托管 GitLab 实例上使用 GitLab CI/CD 功能。它不会改变任何东西,除了您将在其上注册跑步者的主机:

您可以根据需要添加任意数量的跑步者(我想是的,至少我每个项目有 5-6 个跑步者没有问题)。您只需要为您的项目注册每个跑步者。请参阅 Registering Runners

至于共享运行器与特定运行器,我认为如果你想尝试 GitLab CI/CD.

,你应该坚持使用共享运行器

Shared Runners on GitLab.com run in autoscale mode and are powered by DigitalOcean. Autoscaling means reduced wait times to spin up builds, and isolated VMs for each project, thus maximizing security.

They're free to use for public open source projects and limited to 2000 CI minutes per month per group for private projects. Read about all GitLab.com plans.

你可以在任何机器上安装你自己的跑步者,例如你的笔记本电脑。您可以 deploy it with Docker 快速入门。

最后,是的,如果您使用 ssh 执行程序并在您的服务器上安装 docker-compose,您可以在 gitlab-ci.yml 文件中使用 docker-compose。 但我建议使用 docker 执行器并使用 docker:dind (Docker in Docker) image

What is Docker in Docker?

Although running Docker inside Docker is generally not recommended, there are > some legitimate use cases, such as development of Docker itself.

这是一个示例用法,但没有 docker-compose

image: docker:latest

services:
  - name: docker:dind
    command: ["--experimental"]


before_script:
  - apk add --no-cache py-pip      # <-- add python package install pip
  - pip install docker-compose     # <--- add docker-compose 
  - echo "$CI_REGISTRY_PASSWORD" | docker login -u "$CI_REGISTRY_USER" --password-stdin    # <---- Login to your registry

build-master:
  stage: build
  script:
    - docker build --squash --pull -t "$CI_REGISTRY_USER"/"$CI_REGISTRY_IMAGE":latest .
    - docker push "$CI_REGISTRY_USER"/"$CI_REGISTRY_IMAGE":latest
  only:
    - master

build-dev:
  stage: build
  script:
    - docker build --squash --pull -t "$CI_REGISTRY_USER"/"$CI_REGISTRY_IMAGE":"$CI_COMMIT_REF_SLUG" .
    - docker push "$CI_REGISTRY_USER"/"$CI_REGISTRY_IMAGE":"$CI_COMMIT_REF_SLUG"
  except:
    - master

如您所见,我构建了 Docker 映像,对其进行标记,然后将其推送到我的 Docker 注册表,但您可以推送到任何注册表。当然,您可以随时在 script 声明

中使用 docker-compose

我的 Git 存储库看起来像:

/my_repo
|---- .gitignore    
|---- .gitlab-ci.yml    
|---- Dockerfile    
|---- README.md

而我的跑步者的 config.toml 看起来像:

[[runners]]
  name = "4Gb digital ocean vps"
  url = "https://gitlab.com"
  token = "efnrong44d77a5d40f74fc2ba84d8"
  executor = "docker"
  [runners.docker]
    tls_verify = false
    image = "docker:dind"
    privileged = false
    disable_cache = false
    volumes = ["/var/run/docker.sock:/var/run/docker.sock", "/cache"]
    shm_size = 0
  [runners.cache]

您可以查看 https://docs.gitlab.com/runner/configuration/advanced-configuration.html 以了解有关 Runner 配置的更多信息。

Note : All the variables used here are secret variables. See https://docs.gitlab.com/ee/ci/variables/ for explanations

我希望它能回答你的问题