Нужен безопасный, быстрый и автономный способ хранения контейнерных образов? Развернуть собственный приватный Docker Registry проще, чем кажется.
Зачем запускать собственный Docker Registry?
Преимущества:
- Обход ограничений Docker Hub
- Безопасное хранение приватных образов
- Ускорение CI/CD процессов
- Контроль хранения и доступа к образам
Особенно полезно для изолированных (air-gapped) и корпоративных сред.
1. Требования
Понадобится:
- Установленный Docker
- Сервер или виртуальная машина
- Необязательно: домен и TLS-сертификаты (для продакшена)
2. Быстрый запуск локального Registry
docker run -d -p 5000:5000 --name registry registry:2
Registry будет доступен на localhost:5000
.
Пример загрузки образа:
docker tag alpine localhost:5000/alpine
docker push localhost:5000/alpine
Загрузка:
docker pull localhost:5000/alpine
3. Постоянное хранилище
Для продакшена подключите том:
docker run -d -p 5000:5000 \
--name registry \
-v /opt/registry/data:/var/lib/registry \
registry:2
4. TLS через Nginx или Caddy (рекомендуется)
Обеспечьте HTTPS с помощью обратного прокси:
Пример для Caddy:
registry.example.com {
reverse_proxy localhost:5000
tls you@example.com
}
Запуск Caddy:
docker run -d \
-v $PWD/Caddyfile:/etc/caddy/Caddyfile \
-p 80:80 -p 443:443 \
--name caddy \
caddy
Теперь доступен по адресу: https://registry.example.com
Настройка клиента Docker:
{
"insecure-registries" : ["registry.example.com"]
}
Совет: для продакшена используйте только реальные TLS-сертификаты.
5. Аутентификация (опционально)
Возможности:
- auth токены
- Basic auth через htpasswd
Пример:
mkdir auth
docker run --entrypoint htpasswd httpd:2 -Bbn user pass > auth/htpasswd
Запуск:
docker run -d -p 5000:5000 \
--name registry \
-v $(pwd)/auth:/auth \
-e "REGISTRY_AUTH=htpasswd" \
-e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \
-e "REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd" \
registry:2
6. Очистка старых образов
Registry не удаляет старые слои автоматически. Решения:
- registry garbage collection
- Скрипт + cron
7. Бонус: Docker Compose
Создаем директорию и пользователя для аторизации:
mkdir -p ~/docker-registry/auth
cd ~/docker-registry/auth
htpasswd -Bc registry.passwd myuser
Описываем docker-compose:
vi ~/docker-registry/docker-compose.yml
version: '3'
services:
registry:
image: registry:2
ports:
- 5000:5000
environment:
REGISTRY_AUTH: htpasswd
REGISTRY_AUTH_HTPASSWD_REALM: Registry-Realm
REGISTRY_AUTH_HTPASSWD_PATH: /auth/registry.passwd
REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY: /data
volumes:
- registry-data:/data
- ./auth:/auth
volumes:
registry-data:
Запуск:
cd ~/docker-registry
docker compose up -d
Сводка
Возможность | Локальный Registry | Продакшн |
---|---|---|
Постоянное хранилище | ❌ Нет | ✅ Да |
Шифрование TLS | ❌ Нет | ✅ Да |
Аутентификация | ❌ Нет | ✅ Да |
Очистка | ⚠️ Вручную | ⚠️ Вручную |
Заключение
Приватный Docker Registry — это быстрый способ получить полный контроль над контейнерными образами. Он делает DevOps-процессы безопаснее и эффективнее.
Полезные ссылки
Нужна помощь в автоматизации? Пиши в комментарии или свяжись с нами!