MAATRIX / Блог / Как установить и настроить приватный Docker Registry на VPS

Как установить и настроить приватный Docker Registry на VPS

Как установить и настроить приватный Docker Registry на VPS

MAATRIX

Хранить собственные образы в публичном реестре не всегда уместно: приватный код, лимиты на скачивания, зависимость от внешнего сервиса. Установить приватный 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 — десятки моделей в одном окне. Оплата картой РФ и по СБП.