# 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
```