Как поделиться Docker-образом: registry, save/load и export/import

Быстрые ссылки
Использовать Docker Registry
Экспорт образов
Чем отличается docker export
Краткое резюме
Docker-образ собран и вы хотите, чтобы коллега запустил точно такую же копию, не прогоняя сборку локально. Вместо пересылки Dockerfile вы можете передать готовый образ. Это устраняет риск тонких различий при повторной сборке. В зависимости от ситуации доступны два основных подхода: пуш в реестр и экспорт в архив.
Использовать Docker Registry
Самый простой способ поделиться образом — запушить его в Docker Registry. Это встроено в Docker CLI: никаких ручных переносов файлов не требуется.
По умолчанию используется Docker Hub. Он позволяет публиковать образы публично и предоставляет одну приватную репу для бесплатного аккаунта. Зарегистрируйтесь на Docker Hub и выполните в терминале:
docker loginУкажите учетные данные, чтобы связать локальный Docker с аккаунтом.
Дальше собирайте образ как обычно, добавив тэг, начинающийся с вашего имени пользователя Docker Hub:
docker build -t my-account/my-image:latest .Затем отправьте образ в реестр:
docker push my-account/my-image:latestПосле этого образ хранится в Docker Hub. Другие пользователи смогут скачать его командами docker pull или docker run.
Важно: в реальных проектах публичный Docker Hub может не подойти — команды часто предпочитают приватный реестр. Вы можете развернуть собственный registry (совместимый с docker push/docker pull) или использовать облачные решения (AWS ECR, GCR, Azure ACR). Приватный реестр даёт контроль доступа и хранение внутри инфраструктуры.
Советы при работе с реестром:
- Используйте семантическую версионировку тегов (v1.2.3), не только latest.
- Настройте retention/cleanup на сервере реестра, чтобы не переполнять хранилище.
- Если требуется безопасность, включите сканирование образов и подпись (notary).
Экспорт образов (docker save / docker load)
Если реестр недоступен, экспортируйте образ в tar-архив и передайте файл вручную. Команды встроены в Docker CLI. Соберите образ и выполните:
docker save my-image:latest > my-image.tarЭто создаст tar-архив со слоями образа и метаданными (тэги). Архив может быть большого размера — обычно передают через файловый сервер, облачное хранилище или USB-накопитель.
Чтобы загрузить образ на целевой машине, используйте:
docker load < my-image.tarПосле загрузки образ появится в docker images и готов к запуску docker run.
Плюсы и минусы метода save/load:
- Плюсы: не требует сетевого реестра, удобно для оффлайн-передачи и архивирования.
- Минусы: ручной перенос файла, отсутствие управления доступом и метаданные реестра. Для частого обмена неудобно.
Когда стоит архивировать образы:
- Долгосрочное бэкап-хранилище старых релизов.
- Перенос между изолированными сетями.
- Отправка образа заказчику, у которого нет доступа в ваш реестр.
Чем отличается docker export
Существует команда docker export, которая часто путается с docker save. Главное отличие:
docker saveработает с образами и сохраняет слои, тэги и метаданные образа.docker exportэкспортирует файловую систему отдельного контейнера (состояние запущенного контейнера) в tar-архив.
Пример экспорта контейнера:
docker export my-container > my-container.tarАрхив содержит корневую файловую систему Linux (/bin, /etc, /usr и т. п.). Но это не полная реконструкция исходного образа: метаданные Dockerfile, история слоёв и конфигурация образа (например, инструкция ENTRYPOINT, метаданные пользователя) не сохраняются в том же виде.
Чтобы превратить экспорт в образ, используйте docker import:
docker import my-container.tar my-image:latestВ результате получится новый образ с файловой системой из контейнера, но без исходных слоёв базового образа и с возможными отличиями в конфигурации. Смонтированные тома в исходном контейнере не включаются в экспорт — их нужно бэкапить отдельно.
Используйте docker export когда вам нужен именно снэпшот файловой системы контейнера, например для отладки или миграции нестандартного окружения; для полноценного обмена образами предпочтительнее docker save.
Когда применять каждый подход — простая эвристика
- Нужна интеграция CI/CD, управление версиями и доступ по сети → Registry (Docker Hub / ECR / ACR / GCR / приватный registry).
- Оффлайн-перенос между машинами или архивирование релиза → docker save / docker load.
- Снэпшот живого контейнера для восстановления файловой системы → docker export / docker import.
Важно: для воспроизводимости среды лучше делиться образом (save/registry) нежели контейнером (export).
Пошаговый план: playbook для передачи образа коллегам
- Определите требование: публично/приватно, частота, скорость.
- Выберите канал: Registry (предпочтительно) или tar-архив.
- Обновите тэги образа: используйте имя/версию/дату.
docker build -t team/app:1.2.0 .4a. Если Registry доступен — залогиньтесь и отправьте:
docker login
docker push team/app:1.2.04b. Если экспорт в tar — сохраните и загрузите на файловый сервер:
docker save team/app:1.2.0 > team-app-1.2.0.tar- Передайте ссылку/файл и инструкции по загрузке на стороне получателя (docker pull / docker load).
- Проверьте на целевой машине:
docker imagesи запустите контейнерdocker run. - Зафиксируйте действие в changelog или релиз-нотах.
Критерии приёмки
- Получатель запускает контейнер и видит ожидаемое поведение приложения.
- Версия и хэш образа совпадают с отправленным (по тэгу и метаданным).
- Если использовано шифрование/подпись — подпись валидна.
Роли и чеклист (разработчик / DevOps)
Разработчик:
- Собрать образ локально и пройти тесты на контейнере.
- Пометить правильным тэгом и подготовить релизные заметки.
DevOps / Системный администратор:
- Проверить доступность реестра и права доступа.
- Настроить retention и бэкапы реестра.
- Обеспечить безопасную передачу tars для оффлайн-режима.
Оба:
- Убедиться, что секреты и средовые файлы не попали в образ.
- Документировать способ восстановления из архива.
Когда это не сработает — типичные ошибки и обходы
- Образ слишком большой: используйте multi-stage builds для уменьшения размера, чистите временные слои.
- Секреты попали в образ: пересоберите без секретов, вращайте ключи и откатите распространённые образы.
- Ограничения сети: используйте физические переносчики или зашифрованные облачные ссылки.
- Несовместимость архитектур (amd64 vs arm64): убедитесь, что образ собран для целевой архитектуры или используйте многоплатформенные сборки (docker buildx).
Пример обхода для больших образов: разделите функциональность на несколько мик-сервисов, отдавайте только требуемые образы.
Безопасность и конфиденциальность
Важно:
- Не храните в образах пароли и приватные ключи. Используйте переменные окружения или секреты при запуске (Docker secrets, Vault).
- Для приватного распространения используйте TLS и аутентификацию реестра.
- При передаче tar-файлов по облаку применяйте шифрование на уровне хранилища или архивов (gpg, openssl).
Примечание: если образ содержит персональные данные или приватную информацию, проверьте соответствие процессу локальных правил защиты данных (GDPR/локальные требования).
Факты и быстрые числа
- Команды: docker build, docker push, docker pull, docker save, docker load, docker export, docker import.
docker saveсохраняет образы с их слоями и тэгами.docker exportсохраняет только файловую систему контейнера (без истории слоёв).- Рекомендуем: использовать тэги вида
vMAJOR.MINOR.PATCHвместоlatestдля воспроизводимости.
Отладка и распространённые команды
- Проверить локальные образы:
docker images- Убедиться, что образ был загружен после
docker load:
docker images | grep my-image- Убедиться в целевой архитектуре образа (inspect):
docker inspect --format='{{.Os}}/{{.Architecture}}' my-image:latestГалерея крайних случаев
- Образ содержит большой кеш (node_modules/.cache): уменьшите слои и добавьте
.dockerignore. - Образ собран для amd64, а на целевой машине arm64: используйте
docker buildxдля мультиархитектурной сборки. - Тар-файл повреждён при передаче: храните контрольную сумму (sha256) рядом с архивом.
Глоссарий в одну строку
- Registry: сервер для хранения и распространения Docker-образов.
- Tag: метка образа, используемая для версионирования.
- Layer: слой файловой системы, образующий образ Docker.
- Export vs Save: export — контейнерная ФС, save — образ со слоями.
Краткое резюме
Docker позволяет легко делиться образами: предпочитайте реестр для частых обменов и управления, docker save/docker load — для оффлайн-переноса и архивирования, а docker export/docker import — для моментальных снимков контейнера. Всегда проверяйте размер образа, отсутствие секретов и совместимость архитектур.
Важно: смонтированные тома не включаются в экспорт контейнера — бэкап их отдельно.
Похожие материалы
Как скачать приватное видео с Facebook
Как создать Omoji на OnePlus
Как включить и настроить статус активности в Discord
Как хранить краску, чтобы она не испортилась
Переназначение средней кнопки мыши в Ubuntu