Команды docker save/load, docker export/import – в чем отличие, как и когда ими пользоваться
В этой статье я хочу рассказать про пары команды docker save/load и docker export/import, показать примеры их использования и рассказать чем они отличаются.
Да и как обычно, если тексту с картинками вы предпочитаете видео, то вот моя видео-инструкция на YouTube.
Команды docker save и docker load
Начнем с пары docker save/load. Эта пара команд работает с докер-имиджами. Команда docker save сохраняет имидж с локальной машины в tar-архив. Этот архив содержит всю необходимую информацию, чтобы потом восстановить докер-имидж. Восстановление докер-имиджа из tar-архива производится командой docker load.
Теперь посмотрим на примере как это делается. У меня локально есть докер-имидж “alpine”.
Чтобы сохранить его как tar-архив воспользуемся командой
docker save alpine -o alpine-image.tar
Обратите внимание, на ключ “-o“. Он позволяет указать имя файла, в который надо сохранить докер-имидж.
Теперь я удалю этот имидж из системы командой
docker image rm alpine
Как вы видите, никаких имиджей у меня сейчас больше нет.
Далее, для загрузки докер-имиджа из tar-архива нужно вызвать команду
docker load -i alpine-image.tar
В ключе “-i” указывается имя файла с архивом. Причем обратите внимание, докер-имидж восстановился именно с тем же репозиторием, тэгом и даже image id. Последнее, правда, удивительно.
Когда это может быть полезно. В моей практике был случай, когда у нас в проекте был Dockerfile но у одного из разработчиков не проходила локальная сборка этого файла из-за каких-то проблем с промежуточной командой “npm install”. Времени разбираться особо у нас с тот момент не было, и мы просто сохранили имидж в архив с машины у одного разработчика и восстановили командой docker load на машине, где была проблема со сборкой.
Команды docker export и docker import
Если команды save/load довольно просты для понимания – выгружают и загружают докер-имидж, то взаимосвязь между export/import не такая линейная. Команда docker export – выгружает файловую систему докер-контейнера как tar-архив. Когда это может быть полезно. Например, если во время работы контейнера создаются некие артефакты, которые довольно трудоемко пересоздать или можно использовать docker export чтобы сделать своего рода «бэкап» для докер-контейнера. Для демонстрации работы этой команды запустим временный контейнер на основе alpine докер-имиджа командой
docker run --rm -it alpine sh
Далее откроем второй терминал/командную строку и командой
docker export -o alpine-fs.tar 8f4ae688ed8a
сохраним файловую систему контейнера в tar-архив
Теперь рассмотрим команду docker import. Она не создает докер-контейнер как можно было бы ожидать. Команда docker import на основе tar-архива, созданного командой docker export создает опять-таки докер-имидж. А вот на основе этого докер-имиджа уже можно развернуть докер-контейнер.
docker import alpine-fs.tar alpine-fs
Заключение
В заключение повторю ключевые идеи из статьи
- docker save – сохраняет докер-имидж как tar-архив. Этот архив можно, например, скопировать на другую машину.
- docker load – создаёт докер-имидж из tar-архива созданного командой docker save
- docker export – сохраняет файловую систему докер-контейнера как как tar-архив.
- docker import – создает докер-имидж, а не докер-контейнер из tar-архива созданного командой docker export.
Комментарии