Как использовать команду сохранения Docker-образов для экспорта образов

DockerDockerBeginner
Практиковаться сейчас

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

В этом лабораторном занятии вы узнаете, как использовать команду docker save для экспорта Docker-образов в файлы архива tar. Это важный навык для резервного копирования образов, передачи их между системами без реестра или объединения нескольких образов для распространения.

Вы научитесь сохранять один образ, сохранять несколько образов в один архив, сохранять определенную платформенную версию образа и сжимать сохраненный архив образа с использованием gzip. По завершении этого лабораторного занятия вы будете свободно использовать команду docker save для различных задач по управлению образами.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/ImageOperationsGroup(["Image Operations"]) docker/ImageOperationsGroup -.-> docker/pull("Pull Image from Repository") docker/ImageOperationsGroup -.-> docker/images("List Images") docker/ImageOperationsGroup -.-> docker/save("Save Image") subgraph Lab Skills docker/pull -.-> lab-555162{{"Как использовать команду сохранения Docker-образов для экспорта образов"}} docker/images -.-> lab-555162{{"Как использовать команду сохранения Docker-образов для экспорта образов"}} docker/save -.-> lab-555162{{"Как использовать команду сохранения Docker-образов для экспорта образов"}} end

Сохранение одного образа в архив tar

На этом этапе вы узнаете, как сохранить один Docker-образ в файл архива tar. Это полезно для резервного копирования образов или передачи их на другую систему без прямого подключения к Docker-реестру.

Сначала давайте загрузим простой Docker-образ, который мы будем использовать в этом примере. Мы будем использовать образ hello-world, который небольшой и подходит для этой демонстрации.

docker pull hello-world

Вы должны увидеть вывод, указывающий на то, что образ загружается и скачивается.

Using default tag: latest
latest: Pulling from library/hello-world
...
Status: Downloaded newer image for hello-world:latest
docker.io/library/hello-world:latest

Теперь, когда у нас есть образ hello-world на локальной машине, мы можем сохранить его в архив tar с помощью команды docker save. Базовый синтаксис выглядит так: docker save -o <output_file.tar> <image_name>.

Мы сохраним образ hello-world в файл с именем hello-world.tar в текущем каталоге (~/project).

docker save -o hello-world.tar hello-world

После выполнения этой команды в каталоге ~/project будет создан файл с именем hello-world.tar. Этот файл содержит Docker-образ hello-world.

Вы можете проверить, что файл был создан, и узнать его размер с помощью команды ls -lh.

ls -lh hello-world.tar

Вы должны увидеть вывод, похожий на этот, показывающий размер файла:

-rw-r--r-- 1 labex labex ... hello-world.tar

Теперь этот tar-файл можно передать на другую машину и загрузить с помощью команды docker load.

Сохранение нескольких образов в архив tar

На предыдущем этапе вы узнали, как сохранить один Docker-образ. На этом этапе вы узнаете, как сохранить несколько Docker-образов в один файл архива tar. Это удобно, когда вам нужно объединить несколько образов для распространения или резервного копирования.

Сначала давайте загрузим еще один Docker-образ, чтобы иметь больше одного образа для сохранения. Мы загрузим образ alpine, который представляет собой легковесное Linux-распределение.

docker pull alpine

Вы должны увидеть вывод, указывающий на то, что образ alpine загружается и скачивается.

Using default tag: latest
latest: Pulling from library/alpine
...
Status: Downloaded newer image for alpine:latest
docker.io/library/alpine:latest

Теперь у вас есть как образ hello-world, так и образ alpine на локальной машине. Вы можете проверить это, вывел список локальных образов:

docker images

В выводе должны быть указаны как hello-world, так и alpine.

REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
hello-world   latest    ...            ...            ...
alpine        latest    ...            ...            ...

Для сохранения нескольких образов в один архив tar вы просто перечисляете имена образов после имени выходного файла в команде docker save. Синтаксис: docker save -o <output_file.tar> <image1_name> <image2_name> ....

Мы сохраним как образ hello-world, так и образ alpine в файл с именем images.tar в каталоге ~/project.

docker save -o images.tar hello-world alpine

После выполнения этой команды в каталоге ~/project будет создан файл с именем images.tar. Этот файл содержит как Docker-образ hello-world, так и Docker-образ alpine.

Вы можете проверить, что файл был создан, и узнать его размер с помощью команды ls -lh. Размер будет больше, чем у файла hello-world.tar из предыдущего шага, так как он содержит два образа.

ls -lh images.tar

Вы должны увидеть вывод, похожий на этот:

-rw-r--r-- 1 labex labex ... images.tar

Для подтверждения того, что оба образа включены в архив, вы можете вывести список содержимого tar-файла с помощью команды tar -tf.

tar -tf images.tar

В выводе должны быть показаны файлы, связанные с обоими образами, включая их манифесты и данные слоев. Вы должны увидеть записи, такие как hello-world/ и alpine/.

...
hello-world/
hello-world/manifest.json
...
alpine/
alpine/manifest.json
...

Теперь этот единый tar-файл можно использовать для загрузки обоих образов на другую систему с помощью команды docker load.

Сохранение определенной платформенной версии образа

На этом этапе вы узнаете, как сохранить определенную платформенную версию Docker-образа. Docker-образы могут быть собраны для различных архитектур (например, amd64, arm64 и т.д.). Иногда вам может понадобиться сохранить образ, специально собранный для определенной платформы.

По умолчанию команды docker pull и docker save работают с версией образа, соответствующей архитектуре вашей текущей системы. Однако вы можете указать другую платформу с помощью флага --platform.

Давайте загрузим образ, имеющий версии для разных платформ. Образ alpine является хорошим примером. Мы явно загрузим версию arm64 образа alpine, даже если ваша виртуальная машина LabEx, вероятно, имеет архитектуру amd64.

docker pull --platform arm64 alpine

Вы должны увидеть вывод, указывающий на то, что загружается версия arm64 образа alpine.

arm64: Pulling from library/alpine
...
Status: Downloaded newer image for alpine:latest
docker.io/library/alpine:latest

Теперь давайте сохраним эту конкретную версию arm64 образа alpine в архив tar. Мы снова используем флаг --platform с командой docker save.

Мы сохраним версию arm64 образа alpine в файл с именем alpine_arm64.tar в каталоге ~/project.

docker save --platform arm64 -o alpine_arm64.tar alpine

После выполнения этой команды в каталоге ~/project будет создан файл с именем alpine_arm64.tar. Этот файл содержит версию arm64 Docker-образа alpine.

Вы можете проверить, что файл был создан, с помощью команды ls -lh.

ls -lh alpine_arm64.tar

Вы должны увидеть вывод, похожий на этот:

-rw-r--r-- 1 labex labex ... alpine_arm64.tar

Для подтверждения того, что сохраненный образ действительно является версией arm64, вы можете проверить содержимое tar-файла. Хотя непосредственная проверка архитектуры по содержимому tar-файла является сложной задачей, то факт того, что вы использовали флаг --platform arm64 при выполнении операции сохранения, гарантирует, что сохраненный образ предназначен для этой платформы.

Это демонстрирует, как явно сохранить образ для платформы, отличной от архитектуры вашего хоста.

Сохранение образа и его сжатие с использованием gzip

На этом последнем этапе вы узнаете, как сохранить Docker-образ в архив tar и одновременно сжать его с использованием gzip. Это распространенная практика, позволяющая уменьшить размер файла сохраненного образа, что упрощает его хранение и передачу.

В самой команде docker save нет встроенного флага для сжатия. Однако вы можете достичь сжатия, перенаправив вывод команды docker save в утилиту для сжатия, такую как gzip.

Мы сохраним образ alpine (который вы должны были загрузить на предыдущем этапе) и сжмем его с использованием gzip. Вывод будет перенаправлен в файл с расширением .tar.gz.

Синтаксис включает в себя перенаправление вывода: docker save <image_name> | gzip > <output_file.tar.gz>.

Давайте сохраним образ alpine в сжатый с использованием gzip архив tar с именем alpine.tar.gz в каталоге ~/project.

docker save alpine | gzip > alpine.tar.gz

Эта команда сохраняет образ alpine в стандартный вывод, перенаправляет этот вывод в команду gzip для сжатия, а затем перенаправляет сжатый вывод в файл alpine.tar.gz.

После выполнения этой команды в каталоге ~/project будет создан файл с именем alpine.tar.gz.

Вы можете проверить, что файл был создан, и узнать его размер с помощью команды ls -lh. Сравните его размер с размером несжатого образа alpine (который является частью images.tar или был бы таким, если бы вы сохранили его отдельно), чтобы увидеть эффект сжатия.

ls -lh alpine.tar.gz

Вы должны увидеть вывод, похожий на этот:

-rw-r--r-- 1 labex labex ... alpine.tar.gz

Для подтверждения того, что файл представляет собой сжатый с использованием gzip архив tar, вы можете использовать команду file.

file alpine.tar.gz

В выводе должно быть указано, что это файл с сжатыми данными gzip.

alpine.tar.gz: gzip compressed data, ...

Вы также можете вывести список содержимого сжатого архива с помощью команды tar -tfz. Флаг z сообщает команде tar распаковать файл с использованием gzip перед выводом списка содержимого.

tar -tfz alpine.tar.gz

Вы должны увидеть содержимое образа alpine в архиве, аналогично тому, как вы выводили содержимое images.tar.

...
alpine/
alpine/manifest.json
...

Этот метод эффективен для сохранения и сжатия образов в одной команде.

Резюме

В этом практическом занятии вы узнали, как использовать команду docker save для экспорта Docker-образов в архивы tar. Вы успешно сохранили один образ (hello-world) в файл tar, продемонстрировав базовое использование команды.

Кроме того, вы изучили сохранение нескольких образов в один архив, что полезно для объединения образов. Вы также узнали, как сохранить определенную платформенную версию образа и как сжать выходной tar-файл с помощью gzip для уменьшения его размера. Эти этапы охватывают основные возможности команды docker save для резервного копирования и передачи образов.