Ответ
Есть несколько основных способов поделиться Docker-образом, выбор зависит от аудитории и требований к безопасности.
1. Публичный Docker Registry (Docker Hub). Самый простой способ для публичных образов. Сначала нужно залогиниться и протегировать образ, указав имя своего репозитория.
docker login
docker tag my-app:latest mydockerhubusername/my-app:1.0
docker push mydockerhubusername/my-app:1.0
Теперь любой может получить образ командой docker pull mydockerhubusername/my-app:1.0.
2. Приватный Docker Registry. Для внутренних или коммерческих образов мы используем приватный реестр. Это может быть облачный сервис (AWS ECR, Google Container Registry) или self-hosted решение (Harbor, Nexus). Процесс аналогичен, но включает аутентификацию в конкретный registry.
# Пример для AWS ECR
aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin 123456789.dkr.ecr.us-east-1.amazonaws.com
docker tag my-app:latest 123456789.dkr.ecr.us-east-1.amazonaws.com/my-app:prod
docker push 123456789.dkr.ecr.us-east-1.amazonaws.com/my-app:prod
3. Образ в виде файла (для оффлайн-сценариев).
Иногда нужно передать образ напрямую, без registry. Для этого можно сохранить его в .tar архив.
# Экспорт образа в файл
docker save -o my-app-image.tar my-app:latest
# Файл my-app-image.tar можно скопировать на другую машину
# Импорт образа из файла
docker load -i my-app-image.tar
Важно: Этот метод неудобен для частого обмена и не поддерживает метаданные, как registry (например, многослойность для экономии места при пулле).
4. Docker Registry при CI/CD системе. Такие системы, как GitLab CI или GitHub Actions, предоставляют встроенные registry для образов, собранных в пайплайнах. Образ автоматически пушится туда после успешной сборки и может быть использован в последующих стадиях деплоя.