Как установить и настроить приватный Docker Registry на VPS
Хранить собственные образы в публичном реестре не всегда уместно: приватный код, лимиты на скачивания, зависимость от внешнего сервиса. Установить приватный Docker Registry на VPS — значит получить свой репозиторий образов под полным контролем: с HTTPS, авторизацией и без чужих ограничений. Разберём установку по шагам — от запуска registry в контейнере до защищённого push и pull образов.
Содержание
Обсудить статью, задать вопрос или начать новую тему
Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.
Перейти в сообщество →Зачем нужен собственный реестр образов
Docker Registry — это сервис, где хранятся ваши образы, готовые к развёртыванию. Публичные реестры удобны, но у них есть ограничения: лимиты на число скачиваний, публичность образов по умолчанию, зависимость от доступности внешнего сервиса и его политик. Свой реестр снимает эти вопросы.
Практических причин несколько. Приватность: код и конфигурация внутри образов не покидают вашу инфраструктуру. Скорость: push и pull идут по вашей сети, а если реестр рядом с серверами развёртывания, образы разъезжаются мгновенно. Независимость: вы не упираетесь в лимиты и не зависите от того, доступен ли внешний реестр. Контроль: вы сами решаете, кто и что может загружать.
Отдельно стоит сказать про актуальную для 2026 года ситуацию с доступом. Когда внешние реестры работают из России нестабильно или упираются в ограничения, собственный реестр на зарубежном VPS становится и приватным хранилищем, и надёжным зеркалом. Разместив его на сервере с чистым IP в нужной локации, вы получаете стабильный доступ к своим образам без внешних костылей.
Важно понимать, что реестр — это не то же самое, что система сборки. Он не собирает образы, а только хранит и раздаёт уже собранные: вы делаете docker build где угодно, помечаете образ адресом своего реестра и загружаете его туда командой push, а на серверах развёртывания забираете командой pull. Такая схема отделяет место сборки от места хранения и от места запуска, что удобно для командной работы и автоматических пайплайнов. Один разработчик собрал и залил образ, другой сервер его забрал и запустил — и всё это внутри вашей инфраструктуры, без прогона образов через внешние сервисы. Для проектов с чувствительным кодом это ещё и вопрос безопасности: образ с вашей бизнес-логикой не покидает контролируемый периметр.
Подготовка VPS и хранилища
Реестр нетребователен к процессору, но любит диск: образы занимают место, и его нужно с запасом. Для типового использования хватает 2 ядер и 2 ГБ RAM, а вот диск закладывайте под суммарный объём образов с большим резервом — десятки гигабайт как минимум. Поставьте Docker:
curl -fsSL https://get.docker.com | sh
systemctl enable --now docker
Образы должны храниться в томе, а не внутри контейнера, иначе при пересоздании реестра вы потеряете всё. Подготовьте каталоги под данные, сертификаты и файл авторизации:
mkdir -p /opt/registry/{data,auth,certs}
Локацию выбирайте по задаче: если реестр нужен для доступа к образам из-за рубежа или как стабильное зеркало, логична US-площадка с чистым IP; для команды в России ниже пинг с RU. У MAATRIX доступны обе, а также UK, с оплатой из России картой, СБП или криптой, что удобно, когда внешние реестры капризничают.
Нужен сервер под эту задачу?
Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США и РФ. Оплата картой РФ и по СБП.
Арендовать VPSЗапуск контейнера registry
Сам реестр — это официальный образ registry, который запускается одной командой с монтированием тома под данные. Пока без авторизации и HTTPS — их добавим следующими шагами, а сейчас проверим базовый запуск:
docker run -d \
--name registry \
--restart=unless-stopped \
-p 127.0.0.1:5000:5000 \
-v /opt/registry/data:/var/lib/registry \
registry:2
Порт привязан к 127.0.0.1 намеренно: наружу реестр отдавать напрямую нельзя, потому что без HTTPS и авторизации любой сможет качать и заливать образы. Данные монтируются в /var/lib/registry — это путь, где registry хранит образы. Проверьте, что контейнер поднялся и отвечает:
docker ps | grep registry
curl http://127.0.0.1:5000/v2/
Пустой JSON-ответ {} от эндпоинта /v2/ означает, что реестр работает. Теперь его нужно защитить, потому что в таком виде он полностью открыт.
Авторизация через htpasswd
Открытый реестр — приглашение залить в вашу инфраструктуру что угодно, поэтому доступ закрывают логином и паролем. Docker Registry поддерживает базовую авторизацию через файл htpasswd. Создайте пользователя, воспользовавшись контейнером с утилитой htpasswd, чтобы не ставить её в систему:
docker run --rm --entrypoint htpasswd httpd:2 -Bbn deployer 'СильныйПароль' > /opt/registry/auth/htpasswd
Флаг -B задаёт надёжное шифрование bcrypt, deployer — имя пользователя. Теперь пересоздайте контейнер реестра с подключением этого файла и включением базовой авторизации:
docker rm -f registry
docker run -d --name registry --restart=unless-stopped \
-p 127.0.0.1:5000:5000 \
-v /opt/registry/data:/var/lib/registry \
-v /opt/registry/auth:/auth \
-e REGISTRY_AUTH=htpasswd \
-e REGISTRY_AUTH_HTPASSWD_REALM="Registry Realm" \
-e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd \
registry:2
Теперь реестр требует авторизацию. Но она передаётся в открытом виде, пока нет шифрования, поэтому htpasswd имеет смысл только вместе с HTTPS, который настроим следующим шагом.
HTTPS через реверс-прокси
Docker принципиально отказывается работать с реестром по HTTP (кроме localhost), поэтому HTTPS обязателен. Правильный способ — поставить перед реестром реверс-прокси с сертификатом Let's Encrypt. Домен реестра, например registry.example.com, должен указывать на сервер. Настройте Nginx:
server {
listen 80;
server_name registry.example.com;
location / {
proxy_pass http://127.0.0.1:5000;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-Proto $scheme;
client_max_body_size 0;
}
}
Директива client_max_body_size 0 снимает ограничение на размер загрузки — без неё push крупных образов оборвётся с ошибкой 413, и это одна из самых частых граблей. Выпустите сертификат:
certbot --nginx -d registry.example.com
Теперь реестр доступен по HTTPS с авторизацией, а внутренний порт 5000 закрыт от прямого доступа. Прокси терминирует шифрование, а реестр работает за ним в приватной сети хоста.
Push и pull образов, обслуживание
Проверим весь путь. Сначала войдите в реестр под созданным пользователем, затем пометьте локальный образ адресом вашего реестра и загрузите его:
docker login registry.example.com
docker tag myapp:1.0 registry.example.com/myapp:1.0
docker push registry.example.com/myapp:1.0
Скачивание с другого сервера — это docker login и docker pull того же адреса. Если всё настроено верно, образы ходят по HTTPS с авторизацией. Учётные данные Docker сохраняет локально, поэтому на серверах развёртывания достаточно один раз выполнить login.
Обслуживание сводится к контролю за диском и обновлениями. Образы накапливаются, и место надо чистить: удаление ненужных тегов и последующая сборка мусора в реестре освобождают диск. Данные реестра в томе /opt/registry/data обязательно включайте в резервные копии — это ваши образы, и их потеря болезненна. Следите за свободным местом; когда образов становится много и диск заканчивается, это прямой повод взять VPS с большим NVMe. У MAATRIX серверы с быстрым диском доступны в локациях RU, US и UK с оплатой из России картой или криптой, а собственный реестр на таком сервере остаётся стабильным и приватным хранилищем образов под вашим полным контролем.
Нужен сервер под эту задачу?
Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США и РФ. Оплата картой РФ и по СБП.
Арендовать VPSОбсудить статью, задать вопрос или начать новую тему
Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.
Перейти в сообщество →Частые вопросы
Зачем нужен приватный Docker Registry на VPS?
Он даёт приватное хранилище образов под вашим контролем, без лимитов и зависимости от внешних реестров, а на зарубежном VPS ещё и стабильный доступ при ограничениях.
Обязателен ли HTTPS для реестра?
Да, Docker отказывается работать с реестром по HTTP (кроме localhost); ставьте перед ним реверс-прокси с сертификатом Let's Encrypt.
Почему push большого образа обрывается ошибкой 413?
Реверс-прокси ограничивает размер тела запроса; задайте client_max_body_size 0 в конфиге Nginx перед реестром.
Как оплатить VPS под Docker Registry из России?
У MAATRIX доступна оплата картой российского банка, по СБП, криптовалютой или токеном MAAT, иностранная карта не нужна.
Нужны сами нейросети для контента?
Генерируйте изображения, видео и озвучку нейросетями на falapi.io — десятки моделей в одном окне. Оплата картой РФ и по СБП.