Ответ
Для обмена Docker-образами я обычно использую Docker Registry. Конкретный выбор зависит от контекста: публичный образ, приватный корпоративный или быстрая передача между разработчиками.
Основной способ: Docker Registry.
-
Тегирование образа. Перед отправкой образ нужно корректно протегировать, указав адрес целевого registry.
# Тегирование для Docker Hub docker tag my-service:latest username/my-service:1.2.0 # Тегирование для приватного реестра GitLab docker tag my-service:latest registry.gitlab.com/my-group/my-project/my-service:latest -
Аутентификация и отправка. Необходимо залогиниться в registry и выполнить push.
# Логин в Docker Hub docker login # Логин в приватный реестр GitLab (используя Personal Access Token) docker login registry.gitlab.com -u <username> -p <token> # Отправка образа docker push username/my-service:1.2.0 docker push registry.gitlab.com/my-group/my-project/my-service:latest
Альтернативный способ: Сохранение в файл. Полезен для передачи больших образов в средах с ограниченным сетевым доступом или для создания резервных копий.
# Сохраняем образ в архив
docker save -o my-service-backup.tar my-service:latest
# На другой машине загружаем образ из архива
docker load -i my-service-backup.tar
Недостаток этого метода: Файл архива содержит все слои образа и может быть очень большим. Кроме того, теряется история и удобство управления версиями, которые предоставляет registry.
Рекомендации:
- Всегда используйте семантическое версионирование тегов (
:1.2.0,:latest) вместо случайных. - Для приватных registry настройте автоматическую аутентификацию в CI/CD пайплайнах с помощью сервисных аккаунтов или токенов.
- Учитывайте политики хранения образов в registry, чтобы автоматически удалять старые и неиспользуемые теги.