如何使用gitlab ci构建,推送和拉出多个docker容器?

时间:2018-06-04 15:20:33

标签: docker docker-compose gitlab gitlab-ci gitlab-ci-runner

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

我想在gitlab.com上创建多个存储库,并为每个存储库都有一个dockerfile。我现在是否必须将gitlab-runner实例与这些项目中的每一个相关联以构建映像,将其推送到docker repo并让服务器从那里拉出来?然后我不得不以某种方式推动服务器上的docker-compose文件并从那里编写所有内容。

所以我的问题是:

  1. 我能在一台服务器上运行多个(2或3)gitlab-runner用于我的所有回购吗?
  2. 我是否需要特定或共享的跑步者,究竟有什么区别?
  3. 为什么所有教程都使用自托管gitlab实例而不是仅使用gitlab repos(是不是可以使用gitlab-runner和gitlab.com repos?)
  4. 是否可以在gitlab-runner管道中使用docker-compose并立即构建所有内容?
  5. 很抱歉这种非结构化的写作,但我对这些技术有很多疑问。

    提前致谢

1 个答案:

答案 0 :(得分:7)

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

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

对于共享跑步者与特定跑步者,如果您想尝试使用GitLab CI / CD,我认为您应该坚持分享跑步者。

  

GitLab.com上的Shared Runners在自动缩放模式下运行,由DigitalOcean提供支持。自动调节意味着减少等待时间以启动构建,并为每个项目隔离虚拟机,从而最大限度地提高安全性。

     

他们可以免费用于公共开源项目,每个团体每月限制为2000 CI分钟用于私人项目。阅读所有GitLab.com计划。

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

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

  

Docker中的Docker是什么?

     

虽然一般不推荐在Docker中运行Docker,但有>一些合法的用例,比如Docker本身的开发。

以下是一个示例用法,但不包含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_USER":"$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配置的更多信息。

  

注意:此处使用的所有变量都是秘密变量。有关说明,请参阅https://docs.gitlab.com/ee/ci/variables/

我希望它能回答你的问题

相关问题