Как сделать свой Docker Registry в который будем пихать свои docker образы и из которых будем забирать для деплоя.
Docker Registry
Как говорится на оф. сайте базово можно запустить так:
docker run -d -p 5000:5000 --restart=always --name registry registry:2
правда в этом случае появляются две проблемы:
- registry будет требовать https (и тут можно либо дать возможность registry использовать сертификаты, либо спрятать за nginx или подобными и уже с сертификатами пусть разбираются они)
- Нет никакой авторизации
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
- Создаем папку auth (mkdir auth)
- генерируем связку имени пользователя и пароля: htpasswd -Bbn testuser testpassword > auth/htpasswd
- в 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