Свой Docker Registry на VPS
Приватный реестр образов держит ваши сборки под контролем: не зависите от лимитов Docker Hub и не платите за приватные репозитории. Поднимаем за 20 минут.
Содержание
Обсудить статью, задать вопрос или начать новую тему
Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.
Перейти в сообщество →Зачем свой реестр
Docker Hub ограничивает число pull для анонимов и берёт деньги за приватные образы. Если у вас CI/CD, несколько серверов или просто чувствительные сборки — держать реестр у себя дешевле и быстрее.
Реестр — это диск плюс сеть. Образы весят гигабайты, а pull во время деплоя должен быть быстрым. NVMe-диски MAATRIX здесь дают ощутимый выигрыш: слои читаются на порядок шустрее, чем на SATA-хостингах, и деплой не буксует.
- Нет rate-limit — тяните образы сколько нужно.
- Приватность из коробки: образы не покидают ваш VPS.
- Локальный pull внутри одной сети — почти мгновенный.
Нужен сервер под эту задачу?
Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США и РФ. Оплата картой РФ и по СБП.
Арендовать VPS для Docker RegistryЗапуск registry
Официальный образ registry:2 запускается одной командой. Данные складываем в отдельный том, чтобы пережить пересоздание контейнера:
docker run -d --name registry \
--restart unless-stopped \
-v /srv/registry/data:/var/lib/registry \
-p 127.0.0.1:5000:5000 \
registry:2
Обратите внимание: порт слушаем только на 127.0.0.1. Наружу реестр отдадим через nginx с HTTPS — так безопаснее, чем светить 5000 в интернет.
Авторизация (basic-auth)
Без пароля любой сможет заливать образы. Создадим файл с логином/паролем через утилиту htpasswd:
apt install -y apache2-utils
mkdir -p /srv/registry/auth
htpasswd -Bbn deploy 'S3cretPass' > /srv/registry/auth/htpasswd
Этот файл подключит nginx как источник basic-auth (см. следующий раздел). Флаг -B использует bcrypt — то, что нужно для реестра.
HTTPS через nginx
Docker наотрез отказывается работать с реестром по HTTP (кроме localhost). Ставим nginx как реверс-прокси с TLS. Получаем сертификат Let's Encrypt:
apt install -y nginx certbot python3-certbot-nginx
certbot --nginx -d registry.example.com
Конфиг nginx для проксирования на реестр:
server {
server_name registry.example.com;
client_max_body_size 2048m;
location / {
auth_basic "Registry";
auth_basic_user_file /srv/registry/auth/htpasswd;
proxy_pass http://127.0.0.1:5000;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
}
}
Директива client_max_body_size 2048m обязательна — иначе большие слои образов отвалятся с ошибкой 413.
Push и pull образов
Логинимся и заливаем первый образ. Тег обязательно с адресом реестра:
docker login registry.example.com
docker tag myapp:latest registry.example.com/myapp:1.0
docker push registry.example.com/myapp:1.0
На другом сервере тянем так же:
docker login registry.example.com
docker pull registry.example.com/myapp:1.0
Посмотреть список образов в реестре можно через его API:
curl -u deploy:S3cretPass https://registry.example.com/v2/_catalog
Очистка и обслуживание
Реестр не удаляет старые слои сам — диск постепенно забивается. Включите сборку мусора. Сначала пометьте образ на удаление через API, затем запустите garbage-collect:
docker exec registry \
registry garbage-collect /etc/docker/registry/config.yml
- Частая ошибка: забыли
client_max_body_size— большие образы не заливаются. - Частая ошибка: порт 5000 открыт наружу без TLS — реестр доступен всем. Всегда прячьте за nginx.
- Следите за местом:
df -h /srv/registry. Ежедневные бэкапы MAATRIX защитят данные, но диск чистить всё равно нужно.
Нужен сервер под эту задачу?
Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США и РФ. Оплата картой РФ и по СБП.
Арендовать VPS для Docker RegistryОбсудить статью, задать вопрос или начать новую тему
Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.
Перейти в сообщество →Частые вопросы
Можно ли обойтись без HTTPS?
Только для localhost или через явный insecure-registries в /etc/docker/daemon.json, что небезопасно. Для боевого реестра всегда используйте TLS через nginx и Let's Encrypt.
Сколько места нужно под реестр?
Зависит от размера и числа образов. Планируйте с запасом: каждый образ приложения — сотни мегабайт. На NVMe-дисках MAATRIX даже большой реестр отдаёт слои очень быстро.
Как удалять старые образы?
Пометьте манифест на удаление через Registry API (DELETE /v2/<name>/manifests/<digest>), затем запустите registry garbage-collect внутри контейнера.