簡體   English   中英

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

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

我有一個 docker-compose 文件,它構建了兩個容器,一個節點應用程序和一個 ngnix 服務器。 現在我想在 Gitlab runners 的幫助下在服務器上自動化構建和運行過程。 我對 CI 相關的東西很陌生,所以請原諒我的方法:

我想在 gitlab.com 上創建多個存儲庫,並為每個存儲庫都有一個 Dockerfile。 我現在是否必須將 gitlab-runner 實例與這些項目中的每一個相關聯才能構建映像,將其推送到 docker repo 並讓服務器從那里提取它? 然后我將不得不以某種方式將 docker-compose 文件推送到服務器上並從那里編寫所有內容。

所以我的問題是:

  1. 我能否在一台服務器上為我的所有存儲庫運行多個(2 或 3 個)gitlab-runner?
  2. 我需要一個特定的或共享的跑步者嗎?到底有什么區別?
  3. 為什么所有教程都使用自托管的 Gitlab 實例而不是只使用 gitlab 存儲庫(是否不可能將 gitlab-runner 與 gitlab.com 存儲庫一起使用?)
  4. 是否可以在 gitlab-runner 管道中使用 docker-compose 並一次構建所有內容?

首先,您顯然可以在https://gitlab.com以及自托管的 GitLab 實例上使用 GitLab CI/CD 功能。 除了您將在其上注冊跑步者的主機外,它不會改變任何內容:

您可以根據需要添加任意數量的跑步者(我認為是這樣,至少我每個項目有 5-6 個跑步者沒有問題)。 你只需要為你的項目注冊每個跑步者。 請參閱注冊跑步者

至於共享跑步者與特定跑步者,我認為如果你想嘗試 GitLab CI/CD,你應該堅持分享跑步者。

GitLab.com 上的 Shared Runners 以自動縮放模式運行,並由 DigitalOcean 提供支持。 自動縮放意味着減少啟動構建的等待時間,並為每個項目隔離 VM,從而最大限度地提高安全性。

它們可以免費用於公共開源項目,對於私人項目,每個組每個月的 CI 分鍾限制為 2000 分鍾。 閱讀所有 GitLab.com 計划。

您可以在任何機器上安裝自己的跑步者,例如您的筆記本電腦。 您可以使用 Docker 部署它以快速啟動。

最后,是的,如果您使用ssh執行程序並在您的服務器上安裝了gitlab-ci.yml -compose,您可以在gitlab-ci.yml文件中使用gitlab-ci.yml docker-compose 但是,我建議使用docker執行和使用docker:dind (碼頭工人在碼頭工人)圖像

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_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 配置的更多信息。

注意:這里使用的所有變量都是秘密變量 有關解釋,請參閱https://docs.gitlab.com/ee/ci/variables/

我希望它能回答你的問題

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM