Свой Docker Registry

Как сделать свой Docker Registry в который будем пихать свои docker образы и из которых будем забирать для деплоя.

Docker Registry

Как говорится на оф. сайте базово можно запустить так:

docker run -d -p 5000:5000 --restart=always --name registry registry:2

правда в этом случае появляются две проблемы:

  1. registry будет требовать https (и тут можно либо дать возможность registry использовать сертификаты, либо спрятать за nginx или подобными и уже с сертификатами пусть разбираются они)
  2. Нет никакой авторизации

http вместо https

Ради теста было решено не заморачиваться сертификатами, поэтому на сервере сертификатов нет, а вот чтобы локальный докер не ругался на сертификаты, необходимо прописать для этого текущий реестр в доверенные в настройках docker.
На клиентской машине: В Linux необходимо создать (или исправить) файл /etc/docker/daemon.json, в Docker Desktop (Windows/MacOS) Preferences — Docker Engine. Необходимо добавить

{ "insecure-registries":["myregistry.example.com:5000"] }

Авторизация

Добавим авторизацию. Речь пойдет о basic
На том же сайте используется htpasswd из образа, чтобы работало как на сайте надо либо использовать свой htpasswd (sudo apt-get install apache2-utils) либо образ 2.7.0

  1. Создаем папку auth (mkdir auth)
  2. генерируем связку имени пользователя и пароля: htpasswd -Bbn testuser testpassword > auth/htpasswd
  3. в registry необходимо прокинуть папку auth и указать типа авторизации
    docker run -d \
    -p 5000:5000 \
    --restart=always \
    --name registry \
    -v "$(pwd)"/auth:/auth \
    -e "REGISTRY_AUTH=htpasswd" \
    -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \
    -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd \
    registry:2

Теперь перед тем как отправить (push) или получить (pull) образ docker необходимо авторизоваться. Для этого можно использовать docker login без параметров, тогда в интерактивном режиме необходимо ввести логин и пароль, либо с параметрами. Так же можно прокинуть данные репозиторию в какую-нибудь папку.

...
volumes:
    - ./data:/var/lib/registry
...

Авторизация

docker login
docker login -u testuser -p testpassword http://registry.example.com:5000

Источники

Deploy a registry

Leave a comment

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.