15. Docker Registry и Hub
Docker Registry — хранилище Docker-образов. Docker Hub — самый популярный публичный реестр, но компании часто используют приватные реестры для безопасности и контроля.
Docker Hub
Заголовок раздела «Docker Hub»Docker Hub — официальный публичный реестр Docker. Содержит тысячи официальных образов от вендоров (nginx, postgres, node) и миллиарды пользовательских образов.
# Войти в Docker Hubdocker 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:tagdocker tag myapp:latest myusername/myapp:latestdocker tag myapp:latest myusername/myapp:v1.2.3
# Загрузить образ на Docker Hubdocker push myusername/myapp:latestdocker push myusername/myapp:v1.2.3
# Скачать образdocker pull myusername/myapp:latest
# Удалить образ из Docker Hub (через API или веб-интерфейс)Приватные реестры
Заголовок раздела «Приватные реестры»Многие компании используют приватные реестры:
| Реестр | Платформа | Особенности |
|---|---|---|
| Docker Hub Private | Docker | Платный, ограничение pulls |
| AWS ECR | Amazon | Интеграция с IAM, сканирование |
| GitHub Container Registry (GHCR) | GitHub | Бесплатно для публичных репо |
| Google Container Registry (GCR) | Интеграция с GKE | |
| Azure Container Registry (ACR) | Azure | Интеграция с AKS |
| GitLab Registry | GitLab | Встроен в GitLab CI/CD |
| Harbor | Self-hosted | Open-source, на Kubernetes |
Работа с GitHub Container Registry
Заголовок раздела «Работа с GitHub Container Registry»# Войти в GHCRecho $GITHUB_TOKEN | docker login ghcr.io -u USERNAME --password-stdin
# Тег для GHCRdocker tag myapp ghcr.io/username/myapp:latest
# Загрузитьdocker push ghcr.io/username/myapp:latest
# Скачатьdocker pull ghcr.io/username/myapp:latestРабота с AWS ECR
Заголовок раздела «Работа с AWS ECR»# Авторизоваться в 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
# Тег и pushdocker tag myapp:latest 123456789.dkr.ecr.us-east-1.amazonaws.com/myapp:latestdocker 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 теги для продакшенаSelf-hosted реестр
Заголовок раздела «Self-hosted реестр»# Запустить простой реестр локальноdocker run -d \ --name registry \ -p 5000:5000 \ -v registry_data:/var/lib/registry \ registry:2
# Использовать локальный реестрdocker tag myapp localhost:5000/myapp:latestdocker push localhost:5000/myapp:latestdocker pull localhost:5000/myapp:latest