Syntax highlighting of devops/gitlab/registry

= Gitlab Registry =

<<TableOfContents()>>

== Garbage ==

{{{#!highlight bash
docker exec -it gitlab gitlab-ctl registry-garbage-collect --delete-manifests

}}}

== Internal ==

Docker Registry запущен в Gitlab по умолчанию. Для того, чтобы получить к нему доступ достаточно пробросить порт 5050 при создании контейнера.

Для использования s3 в качестве хранилища образов необходимо: (1) запустить minio (2) прописать конфигурацию подключения в gitlab.rb.
Запуск minio смотри в блокноте sb_devops
Конфигурация подключения
{{https://clck.ru/Xsh6f|message2505}}

== External ==

[[https://about.gitlab.com/2016/05/23/gitlab-container-registry/|GitLab Container Registry|class=" moin-https"]]

[[https://docs.gitlab.com/ce/administration/container_registry.html|GitLab Container Registry administration|class=" moin-https"]]

[[https://gitlab.com/gitlab-org/gitlab-ce/issues/25967|How to setup omnibus installation to use an external Docker registry?|class=" moin-https"]]

[[https://gitlab.com/gitlab-org/omnibus-gitlab/issues/2783|Docker login fails to gitlab registry, when gitlab and the registry are on separate domains|class=" moin-https"]]

[[https://github.com/cpoetter/Synology-GitLab-Setup|Setup of GitLab Docker on Synology DSM|class=" moin-https"]]

[[https://github.com/sameersbn/docker-gitlab/blob/master/docs/container_registry.md|GitLab Container Registry|class=" moin-https"]]

[[https://github.com/docker/distribution/issues/1143|Token authentication error: token signed by untrusted key with ID: "xyz"|class=" moin-https"]]

=== Registry Auth via Gitlab ===

Ниже приведен способ, как "подружить" ''gitlab'', запущенный из docker-образа, и  внешний docker-registry. Под понятием "внешний" предполагается Registry не из состава gitlab.

Прописываем в ''/srv/gitlab/config/gitlab.rb'' следующую конфигурацию:

{{{#!highlight ruby
# /srv/gitlab/config/gitlab.rb
gitlab_rails['registry_enabled'] = true
gitlab_rails['registry_api_url'] = "https://registry.example.com:5000"
gitlab_rails['registry_key_path'] = "/etc/gitlab/token.key"
gitlab_rails['registry_issuer'] = "gitlab-issuer"

}}}

Опция ''registry_key_path'' определяет куда ''gitlab'' '''запишет''' внутренний RSA ключ, который необходимо использовать для подписи сертификата, который, в свою очередь, будет отдан ''registry''.

Выпускаем сертификат с помощью ''token.key''

{{{#!highlight bash
openssl req -key token.key -new -x509 -days 3650 -out token.crt

}}}

Сертификат ''token.crt'' копируем на сервер с ''registry''

Конфигурируем ''registry'' с учетом данного сертификата:

{{{#!highlight yaml
version: '3'
services:
  registry:
    image: registry:2
    restart: always
    ports:
      - 5005:5000 
    environment:
      REGISTRY_HTTP_ADDR: 0.0.0.0:5000
      REGISTRY_HTTP_TLS_CERTIFICATE: /certs/domain.crt
      REGISTRY_HTTP_TLS_KEY: /certs/domain.key
      REGISTRY_LOG_LEVEL: info
      REGISTRY_AUTH_TOKEN_REALM: https://gitlab.onrails.ru/jwt/auth
      REGISTRY_AUTH_TOKEN_SERVICE: container_registry
      REGISTRY_AUTH_TOKEN_ISSUER: gitlab-issuer
      REGISTRY_AUTH_TOKEN_ROOTCERTBUNDLE: /certs/token.crt
    volumes:
      - /opt/registry/data:/var/lib/registry
      - /opt/registry/certs:/certs

}}}

Артефакты:

1) Раздел ''Registry'' в проектах ''Gitlab''

2) Авторизация в Docker Registry через Gitlab

{{{#!highlight bash
docker login registry.example.com:5000
Username: gitlab-username
Password: gitlab-password
Login Successed

}}}

3) Заливка образа в Registry и отображение его в соответствующем разделе проекта Gitlab

{{{#!highlight bash
docker push registry.example.com:5000/username/project-name

}}}