Как поделиться Docker-образом

Быстрые ссылки
Использовать Docker-реестр
Экспорт образов
А что такое “docker export”?
Резюме
Построили Docker-образ и хотите передать его коллеге? Ниже — детальное руководство о том, как распространить уже собранный образ так, чтобы получателю не пришлось запускать
docker buildсамому. Отправка готового образа вместо Dockerfile гарантирует, что коллега получит ту же самую среду и версии. Повторная сборка могла бы дать слегка отличающийся результат. В зависимости от задач у вас есть два основных варианта передачи.
Использовать Docker-реестр
Самый простой метод — загрузить образ в Docker-реестр. Docker CLI полностью поддерживает работу с реестром. При таком способе нет ручных переносов файлов между машинами.
По умолчанию используется Docker Hub. Он позволяет публиковать образы публично и предоставляет одну приватную репозиторию. Зарегистрируйтесь на Docker Hub и затем выполните в терминале:
docker loginУкажите учетные данные для подключения Docker CLI к вашей учётной записи.
Далее собирайте образ как обычно, добавив тег, который начинается с вашего имени пользователя Docker Hub:
docker build -t my-account/my-image:latest .После этого используйте команду docker push, чтобы отправить помеченный образ в Docker Hub:
docker push my-account/my-image:latestТеперь образ сохранён в Docker Hub. Остальные пользователи смогут загрузить его командой docker pull или запустить напрямую docker run.
Важно: для команд docker push и docker pull можно использовать любой совместимый реестр — например, приватный реестр вашей команды или облачный реестр провайдера. Если вы работаете в команде и не хотите хранить образы публично, создайте собственный self-hosted реестр или используйте корпоративный реестр. Они полностью совместимы с командами Docker и дают контроль доступа.
Важно: следите за правами доступа в реестре. Публичный образ виден всем, приватный — только тем, кто имеет доступ.
Когда выбирать реестр
- Частая совместная работа над образом — используйте реестр.
- Требуется CI/CD интеграция — реестр упрощает автоматические выкладки.
- Нужен контроль доступа и аудит — корпоративные реестры лучше подходят.
Экспорт образов
Если реестр использовать нельзя, можно вручную экспортировать образ в архив. Docker CLI поддерживает и этот сценарий. После сборки образа используйте docker save, чтобы получить tar-архив с содержимым образа:
docker save my-image:latest > my-image.tarЭкспорт займёт некоторое время. Docker включит всё необходимое для воссоздания образа: все слои, указанные в Dockerfile, и слои базового образа. Архив также содержит данные о тегах.
Поскольку результат — обычный tar-файл, вы можете распространять его любым удобным способом: через файловый сервер, облачное хранилище, переносной диск или SFTP. Архиы могут быть большими — обычно проще загрузить их в облако и дать ссылку, чем пересылать по почте.
Чтобы использовать экспортированный образ, примените docker load, который читает tar-архив из потока ввода и добавляет образ в локальные изображения:
docker load < my-image.tarПосле выполнения вы увидите импортированный образ в выводе docker images. Теперь можно запускать контейнеры с помощью docker run.
Экспорт/импорт требует ручной передачи файла и поэтому менее удобен для системного или частого обмена, но полезен в ряде случаев:
- Архивирование старых образов для экономии места в реестре.
- Передача образа в сети без прямого доступа к реестру.
- Отправка образа заказчику без публикации в общем хранилище.
Практические рекомендации при экспорте
- Сжимайте архивы перед передачей (gzip, zstd) для сокращения трафика:
docker save my-image:latest | gzip > my-image.tar.gz. - Для больших образов используйте облачное хранилище с большой пропускной способностью.
- Проверяйте контрольные суммы перед и после передачи (например,
sha256sum).
А что такое docker export?
Есть команда docker export, но её не стоит путать с docker save. docker save работает с образами, а docker export создаёт архив файловой системы конкретного контейнера.
docker export создаёт tar-архив корневой файловой системы контейнера — это снимок /bin, /etc, /usr и т.д. Он может быть полезен для создания реплики контейнера на другой машине.
docker export my-container > my-container.tarОднако важно понимать ограничения: контейнер — это живое окружение, и экспортируемый архив не содержит метаданные образа (слои, история сборки, конфигурацию Dockerfile). При импорте такого архива создаётся новый образ, но он не равен исходному образу по метаданным и базовому слою:
docker import my-container.tar my-image:latestКоманда docker import возьмёт файловую систему из архива и создаст новый образ с тем же файловым содержимым, но без истории слоёв и инструкций Dockerfile. Также тома, которые были смонтированы в контейнере, в архив не попадут.
Когда использовать export/import
- Нужен быстрый снимок работающего контейнера без истории сборки.
- Вы хотите сохранить только файловую систему без метаданных.
Когда нужен точный и воспроизводимый образ, лучше использовать docker save/docker load или реестр.
Контрольный список перед отправкой образа
- Убедиться, что образ работает локально и проходит тесты.
- [ ] Прописать версию и теги (semver или
latestпо соглашению команды). - Очистить чувствительные данные и секреты из образа (ключи, пароли).
- Проверить лицензии зависимостей и сторонних бинарников.
- Сжать и проверить контрольную сумму при экспорте.
- Обновить документацию: как запустить, какие переменные окружения нужны.
Команды-шпаргалка
- Авторизация в реестре:
docker login - Сборка с тегом:
docker build -t my-account/my-image:latest . - Загрузка в реестр:
docker push my-account/my-image:latest - Экспорт образа в tar:
docker save my-image:latest > my-image.tar - Импорт образа из tar:
docker load < my-image.tar - Экспорт контейнера:
docker export my-container > my-container.tar - Импорт контейнера как образ:
docker import my-container.tar my-image:latest
SOP — Быстрая инструкция отправки образа коллегам
- Соберите образ локально и прогоните тесты.
- Проставьте тег с версией и именем реестра/аккаунта.
- Если используете реестр:
docker login→docker push. - Если реестр недоступен:
docker save my-image:tag | gzip > my-image.tar.gzи загрузите архив в облако. - Сообщите ссылку и контрольную сумму получателю.
- Получатель выполняет
docker load(или распаковывает иdocker load < my-image.tar).
Decision flow — реестр или tar?
flowchart TD
A[Нужно поделиться образом] --> B{Есть доступ к реестру?}
B -- Да --> C[Использовать реестр: docker push]
B -- Нет --> D{Файл слишком большой для передачи?}
D -- Нет --> E[Экспорт: docker save -> передать архива]
D -- Да --> F[Сжать и загрузить в облако -> docker load на стороне получателя]Критерии приёмки
- Получатель успешно выполняет
docker imagesи видит образ с ожидаемым тегом. - Контейнер запускается и проходит набор smoke-тестов (см. тест-кейсы ниже).
- Никаких секретов в образе не обнаружено.
Тест-кейсы и критерии приемки
- Запуск контейнера:
docker run --rm my-image:latest echo OKдолжен вывестиOK. - Проверка версии приложения внутри образа (если есть бинарник):
docker run --rm my-image:latest app --versionсоответствует заявленной. - Сетевые порты проброшены и приложение отвечает на запросы (если требуется).
- Переменные окружения корректно работают.
Риски и смягчения
- Риск: утечка секретов через образ. Смягчение: перед отправкой удалить чувствительные файлы и переменные, использовать секреты runtime.
- Риск: несовместимость базовых образов. Смягчение: описать базовый образ и версии в документации.
- Риск: большой размер архива. Смягчение: оптимизировать Dockerfile, использовать многослойную сборку и сжатие архива.
Глоссарий (одно предложение)
- Образ: неизменяемый набор слоёв и метаданных, из которого создаётся контейнер.
- Контейнер: запущенный экземпляр образа с изолированным файловым пространством и процессами.
- Реестр: хранилище Docker-образов, поддерживающее push/pull.
Альтернативы и когда не подходит
- Если хотите, чтобы коллега собрал образ самостоятельно и видел шаги сборки — передавайте Dockerfile и инструкции по сборке.
- Для многомодульных микросервисов удобнее настроить CI/CD, чтобы артефакты автоматически выкладывались в реестр.
- Если важно хранить историю сборки и слои — избегайте
docker export/import.
Советы для команд из России и СНГ
- При использовании публичного Docker Hub учитывайте региональные ограничения и политику доступа к внешним сервисам компании.
- Для ускорения загрузок большого архива используйте региональные облачные пространства и CDN.
Короткий анонс для команды (пример)
Подготовил Docker-образ сервиса v1.2.0. Можно подтянуть через Docker Hub: my-account/my-image:1.2.0 или скачать архив по ссылке. Проверьте, пожалуйста, что контейнер стартует и возвращает статус OK. Контрольная сумма архива указана в сообщении.
Итог
Docker предоставляет гибкие механизмы обмена образами: реестры удобны для частого и контролируемого распространения, экспорт/импорт полезен при ограничениях доступа. docker export служит для резервных снимков контейнера, но не восстанавливает историю сборки. Всегда проверяйте состав образа, удаляйте секреты и документируйте процесс передачи.
Important: храните архивы и образы с учётом политик безопасности и прав доступа вашей команды.
Похожие материалы
Как устроить идеальную вечеринку для просмотра ТВ
Как распаковать несколько RAR‑файлов сразу
Приватный просмотр в Linux: как и зачем
Windows 11 не видит iPod — способы исправить
PS5: как настроить игровые пресеты