Гид по технологиям

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

6 min read Docker Обновлено 20 Dec 2025
Как поделиться Docker-образом: registry и export
Как поделиться Docker-образом: registry и export

Скриншот терминала с информацией о Docker-образе

Быстрые ссылки

  • Использовать 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 для передачи образа коллегам

  1. Определите требование: публично/приватно, частота, скорость.
  2. Выберите канал: Registry (предпочтительно) или tar-архив.
  3. Обновите тэги образа: используйте имя/версию/дату.
docker build -t team/app:1.2.0 .

4a. Если Registry доступен — залогиньтесь и отправьте:

docker login

docker push team/app:1.2.0

4b. Если экспорт в tar — сохраните и загрузите на файловый сервер:

docker save team/app:1.2.0 > team-app-1.2.0.tar
  1. Передайте ссылку/файл и инструкции по загрузке на стороне получателя (docker pull / docker load).
  2. Проверьте на целевой машине: docker images и запустите контейнер docker run.
  3. Зафиксируйте действие в 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 — для моментальных снимков контейнера. Всегда проверяйте размер образа, отсутствие секретов и совместимость архитектур.

Важно: смонтированные тома не включаются в экспорт контейнера — бэкап их отдельно.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Как скачать приватное видео с Facebook
Социальные сети

Как скачать приватное видео с Facebook

Как создать Omoji на OnePlus
Мобильные

Как создать Omoji на OnePlus

Как включить и настроить статус активности в Discord
Технологии

Как включить и настроить статус активности в Discord

Как хранить краску, чтобы она не испортилась
Домашний ремонт

Как хранить краску, чтобы она не испортилась

Переназначение средней кнопки мыши в Ubuntu
Linux

Переназначение средней кнопки мыши в Ubuntu

Хоровые эффекты для вокала — руководство
Музыкальное продакшн

Хоровые эффекты для вокала — руководство