Syntax highlighting of devops/gitlab/registry

# Gitlab Registry

[TOC]

## Garbage

```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
Конфигурация подключения
![message2505](https://clck.ru/Xsh6f)


## External

[GitLab Container Registry](https://about.gitlab.com/2016/05/23/gitlab-container-registry/)

[GitLab Container Registry administration](https://docs.gitlab.com/ce/administration/container_registry.html)


[How to setup omnibus installation to use an external Docker registry?](https://gitlab.com/gitlab-org/gitlab-ce/issues/25967)

[Docker login fails to gitlab registry, when gitlab and the registry are on separate domains](https://gitlab.com/gitlab-org/omnibus-gitlab/issues/2783)

[Setup of GitLab Docker on Synology DSM](https://github.com/cpoetter/Synology-GitLab-Setup)

[GitLab Container Registry](https://github.com/sameersbn/docker-gitlab/blob/master/docs/container_registry.md)

[Token authentication error: token signed by untrusted key with ID: "xyz"](https://github.com/docker/distribution/issues/1143)


### Registry Auth via Gitlab

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

Прописываем в */srv/gitlab/config/gitlab.rb* следующую конфигурацию:
```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*

```bash
openssl req -key token.key -new -x509 -days 3650 -out token.crt
```

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

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

```docker
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
```bash
docker login registry.example.com:5000
Username: gitlab-username
Password: gitlab-password
Login Successed
```

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

```bash
docker push registry.example.com:5000/username/project-name
```