如何启用 GitLab 容器注册表并在其中推送 docker 镜像

Dmi*_*try 3 gitlab docker gitlab-ci docker-registry gitlab-ce

使用域方法在 GitLab Community Edition 14.2.4 中启用容器注册表的具体步骤是什么,以及如何将 docker 映像推送到注册表?另外,如何将 GitLab CI 与注册表集成?

仅指定以下字符串(如“在其域下配置容器注册表”中所述)不适用于 GitLab 社区版 14.2.4

registry_external_url 'registry.gitlab.example.com'
Run Code Online (Sandbox Code Playgroud)

Dmi*_*try 5

这是一个自我回答的主题,我将指导您完成在 GitLab Community Edition 14.2.4 中启用 Container Registry 的步骤以及如何推送 Docker 镜像。

步骤1:为了启用ContainerRegistry,我使用了域方法(此处描述的现有域下的配置)。编辑 /etc/gitlab/gitlab.rb 文件并添加以下代码行:

registry_external_url 'https://registry.example.com'

gitlab_rails['registry_enabled'] = true
gitlab_rails['registry_host'] = "registry.example.com"

registry['enable'] = true
registry['registry_http_addr'] = "localhost:5000"
registry['log_directory'] = "/var/log/gitlab/registry"
registry['env_directory'] = "/opt/gitlab/etc/registry/env"
registry_nginx['enable'] = true
registry_nginx['listen_port'] = 443
registry_nginx['ssl_certificate'] = "/etc/gitlab/ssl/registry.example.com/fullchain.pem"
registry_nginx['ssl_certificate_key'] = "/etc/gitlab/ssl/registry.example.com/privkey.pem"
Run Code Online (Sandbox Code Playgroud)

添加这些行后,运行gitlab-ctl reconfigure. 请注意,我尝试了不同的方法,包括仅指定registry_external_urlURL,但在使用上述设置之前没有任何效果。在本文中,我跳过了安全认证步骤,此步骤可以以不同的方式完成。我已经使用了为注册表预先生成和指定的 Let's Encrypt 证书。更多信息请点击此处

第 2 步:启用 Container Registry 后,您可以通过导航到Project -> Packages & Registries -> Container Registry在 GitLab 中找到它。在空白页面上,您将找到开始使用注册表的帮助命令。

步骤 3:要将 GitLab CI 与 Container Registry 集成,请将以下代码添加到您的 .gitlab-ci.yml 文件中:

create-image:
  stage: build
  tags:
    - shell
  variables:
    VER: 1.0-${CI_PIPELINE_ID}
    ID: ${CI_COMMIT_SHORT_SHA}
    GIT_SUBMODULE_STRATEGY: recursive
  before_script:
    - echo "Docker registry url is $CI_REGISTRY"
    - echo "Docker registry username is $CI_REGISTRY_USER"
    - echo "Docker registry repo is $CI_REGISTRY_IMAGE"
  timeout: 12h
  script:
    - docker build -t ${CI_REGISTRY_IMAGE}:$VER ${CI_PROJECT_DIR}

upload-to-registry:
    stage: deploy
    when: manual
    tags:
       - shell
    script:
        - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
        - docker push ${CI_REGISTRY_IMAGE}:$VER
Run Code Online (Sandbox Code Playgroud)