MAATRIX / Блог / Свой Docker Registry на VPS

Свой Docker Registry на VPS

Блог MAATRIX · 2026-07-07

Приватный реестр образов держит ваши сборки под контролем: не зависите от лимитов 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 внутри контейнера.