Как поделиться Docker-образом с другим человеком?

«Как поделиться Docker-образом с другим человеком?» — вопрос из категории Docker, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В DevOps-практике есть несколько основных способов обмена Docker-образами.

1. Использование Docker Registry (рекомендуемый способ) Это самый распространенный и удобный метод. Вы загружаете (push) образ в реестр, откуда его может скачать (pull) другой пользователь.

  • Публичный реестр (Docker Hub):
    # Тегируем образ с именем пользователя на Docker Hub
    docker tag my-local-image:latest username/my-image:prod-v1
    # Логинимся в Docker Hub (если еще не сделано)
    docker login
    # Загружаем образ
    docker push username/my-image:prod-v1

    Другой разработчик затем выполнит:

    docker pull username/my-image:prod-v1
  • Приватный реестр (Harbor, GitLab Container Registry, AWS ECR, GCR): Принцип тот же, но требуется аутентификация в конкретном реестре и указание его полного адреса.
    docker tag my-app:latest registry.mycompany.com/team/my-app:latest
    docker push registry.mycompany.com/team/my-app:latest

2. Сохранение и загрузка образа в файл (TAR-архив) Полезно для передачи образов в изолированных средах без доступа к интернету или внутреннему реестру.

  • Экспорт образа в файл:
    docker save -o my-application-image.tar my-app:latest

    Этот .tar файл можно передать по почте, через файлообменник или флешку.

  • Импорт образа из файла:
    docker load -i my-application-image.tar

    Важно: docker save/load сохраняет всю историю слоев и теги образа.

3. Запуск локального Docker Registry Для быстрого обмена в пределах одной сети можно развернуть временный реестр.

# Запускаем registry контейнер
docker run -d -p 5000:5000 --restart=always --name registry registry:2
# Тегируем образ для локального реестра
docker tag my-image:latest localhost:5000/my-image:latest
# Пушим в локальный реестр
docker push localhost:5000/my-image:latest

Коллега в той же сети сможет скачать образ, обратившись к IP-адресу вашей машины: docker pull 192.168.1.10:5000/my-image:latest. Для production этот метод не рекомендуется без настройки аутентификации и TLS.