Введение
Приватный Docker Registry позволяет хранить ваши Docker-образы внутри корпоративной сети или облака, сохраняя конфиденциальность и ускоряя доставку. В этом руководстве показано, как быстро развернуть легковесный реестр на базе образа registry:2 на серверах под управлением Linux, защитить его паролями и опционально настроить TLS.
Требования
- Система под управлением Linux (Ubuntu 20.04+, Debian 11, CentOS 8, Fedora 35).
- Права суперпользователя (
root), либо настроенная sudo-поддержка. - Установленный Docker (>= 20.10).
- Свободный порт
5000для HTTP или443для HTTPS. - Базовые утилиты:
curl,openssl,htpasswd(изapache2-utils).
Настройка приватного реестра
Шаг 1: Установка Docker
На Debian/Ubuntu:
apt update
apt install -y docker.io
На RHEL/CentOS/Fedora:
yum install -y docker
Проверьте версию:
docker --version
Шаг 2: Запуск контейнера registry
Создайте отдельную сеть для реестра:
docker network create registry-net
Запустите официальный контейнер:
docker run -d \
--restart=always \
--network=registry-net \
-p 5000:5000 \
--name registry \
registry:2
Проверьте, что контейнер работает:
docker logs registry
Шаг 3: Настройка базовой аутентификации
Сгенерируйте хеш пароля:
htpasswd -nbB 12345 user | tr -d '\r'
Добавьте хеш в файл .htpasswd (создайте его предварительно):
mkdir -p /opt/registry
echo "user:<generated_hash>" > /opt/registry/.htpasswd
Запустите реестр заново, подключив файл аутентификации:
docker stop registry
docker run -d \
--restart=always \
--network=registry-net \
-p 5000:5000 \
-e REGISTRY_AUTH=htpasswd \
-e REGISTRY_HTPASSWD=/opt/registry/.htpasswd \
--name registry \
registry:2
💡 Совет: Для управления несколькими пользователями используйте скрипт, который добавляет записи в
.htpasswdпри каждом изменении паролей.
Шаг 4: Настройка TLS/HTTPS (необязательно)
Сгенерируйте самоподписанный сертификат:
openssl req -new -newkey rsa:4096 -days 365 -nodes \
-x509 -subj "/CN=registry.example.com" \
-keyout /opt/registry/registry.key \
-out /opt/registry/registry.crt
Запустите реестр с TLS:
docker stop registry
docker run -d \
--restart=always \
--network=registry-net \
-p 5000:5000 \
-p 443:443 \
-e REGISTRY_AUTH=htpasswd \
-e REGISTRY_HTPASSWD=/opt/registry/.htpasswd \
-v /opt/registry/registry.crt:/etc/docker/registry/certs/registry.crt \
-v /opt/registry/registry.key:/etc/docker/registry/certs/registry.key \
--name registry \
registry:2
⚠️ Важно: Для продакшена используйте сертификаты, выданные доверенным CA.
Шаг 5: Проверка работоспособности
Выполните вход в реестр:
docker login localhost:5000
Попробуйте скачать публичный образ:
docker pull hello-world
docker tag hello-world localhost:5000/hello-world
docker push localhost:5000/hello-world
Проверьте каталог через curl:
curl -u user:password http://localhost:5000/v2/_catalog
Проверка результата
Если команды выше завершились без ошибок, реестр готов к использованию. Вы можете проверить доступность через браузер (или curl), используя URL http://localhost:5000/v2/_catalog. Для HTTPS используйте https://localhost:443/v2/_catalog.
Возможные проблемы
- Ошибка подключения: Убедитесь, что порт
5000открыт и Docker может подключаться к сети. - Ошибка аутентификации: Проверьте хеш в
.htpasswd(htpasswd -vb /opt/registry/.htpasswd user). - TLS-ошибки: Убедитесь, что сертификат установлен корректно (
docker logs registry) и браузер доверяет CA. - Низкая производительность: Рассмотрите возможность использования TLS-интерфейса с хост-сетью или размещения реестра на выделенном сервере.
С этим вы полностью настроили приватный Docker Registry на Linux и можете безопасно хранить и распространять свои контейнерные образы.