Свой Docker Registry на VPS
Приватный реестр образов держит ваши сборки под контролем: не зависите от лимитов Docker Hub и не платите за приватные репозитории. Поднимаем за 20 минут.
Содержание
Зачем свой реестр
['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 \\\n --restart unless-stopped \\\n -v /srv/registry/data:/var/lib/registry \\\n -p 127.0.0.1:5000:5000 \\\n registry:2', 'Обратите внимание: порт слушаем только на 127.0.0.1. Наружу реестр отдадим через nginx с HTTPS — так безопаснее, чем светить 5000 в интернет.']
Авторизация (basic-auth)
['Без пароля любой сможет заливать образы. Создадим файл с логином/паролем через утилиту htpasswd:', "apt install -y apache2-utils\nmkdir -p /srv/registry/auth\nhtpasswd -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\ncertbot --nginx -d registry.example.com', 'Конфиг nginx для проксирования на реестр:', 'server {\n server_name registry.example.com;\n client_max_body_size 2048m;\n location / {\n auth_basic "Registry";\n auth_basic_user_file /srv/registry/auth/htpasswd;\n proxy_pass http://127.0.0.1:5000;\n proxy_set_header Host $http_host;\n proxy_set_header X-Real-IP $remote_addr;\n }\n}', 'Директива client_max_body_size 2048m обязательна — иначе большие слои образов отвалятся с ошибкой 413.']
Push и pull образов
['Логинимся и заливаем первый образ. Тег обязательно с адресом реестра:', 'docker login registry.example.com\ndocker tag myapp:latest registry.example.com/myapp:1.0\ndocker push registry.example.com/myapp:1.0', 'На другом сервере тянем так же:', 'docker login registry.example.com\ndocker pull registry.example.com/myapp:1.0', 'Посмотреть список образов в реестре можно через его API:', 'curl -u deploy:S3cretPass https://registry.example.com/v2/_catalog']
Очистка и обслуживание
['Реестр не удаляет старые слои сам — диск постепенно забивается. Включите сборку мусора. Сначала пометьте образ на удаление через API, затем запустите garbage-collect:', 'docker exec registry \\\n 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Частые вопросы
Можно ли обойтись без 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 внутри контейнера.