Перейти к содержимому

15. Docker Registry и Hub

Docker Registry — хранилище Docker-образов. Docker Hub — самый популярный публичный реестр, но компании часто используют приватные реестры для безопасности и контроля.

Docker Hub — официальный публичный реестр Docker. Содержит тысячи официальных образов от вендоров (nginx, postgres, node) и миллиарды пользовательских образов.

Окно терминала
# Войти в Docker Hub
docker login
# Введите username и password (или access token)
# Войти в Docker Hub с токеном
docker login -u myusername --password-stdin < token.txt
# Посмотреть текущий пользователь
cat ~/.docker/config.json
# Выйти
docker logout
Окно терминала
# Создать тег для загрузки на Docker Hub
# Формат: username/repository:tag
docker tag myapp:latest myusername/myapp:latest
docker tag myapp:latest myusername/myapp:v1.2.3
# Загрузить образ на Docker Hub
docker push myusername/myapp:latest
docker push myusername/myapp:v1.2.3
# Скачать образ
docker pull myusername/myapp:latest
# Удалить образ из Docker Hub (через API или веб-интерфейс)

Многие компании используют приватные реестры:

РеестрПлатформаОсобенности
Docker Hub PrivateDockerПлатный, ограничение pulls
AWS ECRAmazonИнтеграция с IAM, сканирование
GitHub Container Registry (GHCR)GitHubБесплатно для публичных репо
Google Container Registry (GCR)GoogleИнтеграция с GKE
Azure Container Registry (ACR)AzureИнтеграция с AKS
GitLab RegistryGitLabВстроен в GitLab CI/CD
HarborSelf-hostedOpen-source, на Kubernetes
Окно терминала
# Войти в GHCR
echo $GITHUB_TOKEN | docker login ghcr.io -u USERNAME --password-stdin
# Тег для GHCR
docker tag myapp ghcr.io/username/myapp:latest
# Загрузить
docker push ghcr.io/username/myapp:latest
# Скачать
docker pull ghcr.io/username/myapp:latest
Окно терминала
# Авторизоваться в ECR (обновлять каждые 12 часов)
aws ecr get-login-password --region us-east-1 | \
docker login --username AWS --password-stdin \
123456789.dkr.ecr.us-east-1.amazonaws.com
# Создать репозиторий
aws ecr create-repository --repository-name myapp
# Тег и push
docker tag myapp:latest 123456789.dkr.ecr.us-east-1.amazonaws.com/myapp:latest
docker push 123456789.dkr.ecr.us-east-1.amazonaws.com/myapp:latest

Правильная стратегия тегирования критически важна:

Окно терминала
# Плохо: только latest (непонятно, что именно)
docker push myapp:latest
# Хорошо: семантическое версионирование
docker push myapp:1.2.3 # конкретная версия
docker push myapp:1.2 # минорная версия
docker push myapp:1 # мажорная версия
docker push myapp:latest # последняя
# Дополнительно: по ветке и коммиту
docker push myapp:main-abc1234 # ветка + SHA коммита
docker push myapp:pr-42 # pull request
# Только latest — плохая практика!
# Используйте immutable теги для продакшена
Окно терминала
# Запустить простой реестр локально
docker run -d \
--name registry \
-p 5000:5000 \
-v registry_data:/var/lib/registry \
registry:2
# Использовать локальный реестр
docker tag myapp localhost:5000/myapp:latest
docker push localhost:5000/myapp:latest
docker pull localhost:5000/myapp:latest