Перенести образ без registry: почему нужен docker save, а не export
Готовый образ нужно передать на учебный стенд, где нельзя обращаться к registry. Кто-то запускает docker export, переносит tar и затем удивляется: загрузка через docker load не принимает архив либо привычная команда запуска потеряла настройки. Обе операции создают tar, но сохраняют разные сущности.
docker image save предназначен для образа: он упаковывает слои и сведения, необходимые для загрузки образа с тегами. docker container export выгружает файловую систему контейнера. Это полезно для другой задачи, но не является взаимозаменяемым форматом переноса образа. Расширение .tar не объясняет, что находится внутри.
Сохраним конкретный образ
Предположим, локально уже существует учебный образ transfer-demo:2026.11. В отдельном каталоге выполните следующую последовательность. Команды на принимающей машине начинаются с load.
docker image inspect transfer-demo:2026.11 --format '{{.Id}}' > expected-image-id.txt
docker image save --output transfer-demo-2026.11.tar transfer-demo:2026.11
sha256sum transfer-demo-2026.11.tar > transfer-demo-2026.11.tar.sha256
# На принимающей машине после передачи трёх файлов:
sha256sum -c transfer-demo-2026.11.tar.sha256
docker image load --input transfer-demo-2026.11.tar
docker image inspect transfer-demo:2026.11 --format '{{.Id}}'
Последний идентификатор должен совпасть с сохранённым expected-image-id.txt. Проверка sha256sum обнаружит повреждение архива при передаче, если файл суммы получен из доверенного канала. Она не подтверждает автора содержимого, когда злоумышленник способен заменить и архив, и сумму.
В примере передаётся точный тег, а не всё содержимое локального repository. Это уменьшает неоднозначность пакета: получатель знает, какую ссылку ожидать после загрузки. Сохраните рядом команду запуска и несекретное описание внешних зависимостей приложения.
Что не переезжает вместе с образом
Образ не содержит текущее содержимое внешних volumes, значения runtime-секретов и состояние работающего приложения. Если контейнер хранит данные в подключённом томе, их нужно переносить отдельной согласованной процедурой. Даже export контейнера не включает содержимое его volumes; при перекрытом каталоге он экспортирует подлежащие файлы образа, а не данные тома.
Не используйте архив образа как замену резервной копии базы данных. Состояние базы требует своей процедуры согласованного сохранения и восстановления. В данном сценарии переносится программный артефакт, который после загрузки должен запускаться с отдельно подготовленной конфигурацией и данными.
Рабочая платформа тоже остаётся важна. Архив с образом одной архитектуры не становится автоматически пригодным для другой. Новые API Docker поддерживают выбор платформ при save/load, но для базовой передачи проще заранее проверить, какие варианты образа реально присутствуют локально и нужны получателю. Не добавляйте --platform в инструкцию для старого daemon без проверки его возможностей.
Перед передачей сравните размер архива с доступным местом получателя и сохраните файл суммы рядом, без изменения имени. Проверку целостности выполните до load: это позволит отличить повреждение транспорта от ошибки формата архива и избежать повторной загрузки заведомо испорченного пакета.
Проверка после загрузки
load восстанавливает теги из архива и может изменить локальную ссылку, которая уже существовала на принимающей машине. Перед загрузкой посмотрите текущий тег и согласуйте отдельное имя для учебного переноса. Важную рабочую версию нельзя подменять случайным совпадением имени.
После сравнения идентификатора выполните минимальную штатную проверку приложения. Совпадение image ID подтверждает перенос образа, но не наличие ожидаемых файлов конфигурации снаружи и не готовность внешней базы. Ошибки запуска разбирайте уже в этом контексте, не пересобирая образ без необходимости.
Откройте программу курса Docker для разработчика. Продолжение этой задачи — понимать, что принадлежит образу, контейнеру и внешним данным, и собирать переносимое окружение приложения с понятной процедурой запуска.
Ещё по теме
Продолжить на практике
- Docker и Docker Compose: контейнеризация приложений ↗
Упакуйте приложение в Docker и запустите его с PostgreSQL через Compose. Образы, сети, тома, диагностика поломок, обновление версий и восстановление данных — с практикой и итоговым проектом.
