Как использовать команду docker image load для загрузки образов

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

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

Введение

В этой лабораторной работе вы научитесь использовать команду docker load для загрузки образов Docker из архивов. Это важный навык для переноса образов между машинами без использования Docker registry. Вы начнёте с подготовки архива образа Docker с помощью команды docker save.

После подготовки вы изучите различные методы загрузки образа. Это включает загрузку образа из стандартного ввода (STDIN), загрузку из файла с использованием флага --input, а также загрузку конкретной платформенной вариации с помощью флага --platform. Выполнив эти шаги, вы получите практический опыт управления образами Docker в автономном режиме.


Skills Graph

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

Подготовка архива образа Docker

На этом шаге мы научимся подготавливать архив образа Docker. Это полезно для переноса образов Docker между разными машинами без использования Docker registry. Мы будем использовать команду docker save для создания архива существующего образа 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-архив. Сохраним его в файл hello-world.tar в директории ~/project.

docker save -o ~/project/hello-world.tar hello-world

Флаг -o указывает путь к выходному файлу. Команда сохранит образ hello-world в указанный файл. Если команда выполнена успешно, вывода не будет.

Чтобы убедиться, что архив создан, можно вывести список файлов в директории ~/project.

ls ~/project

Вы должны увидеть файл hello-world.tar в списке.

hello-world.tar

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

Загрузка образа Docker из STDIN

На этом шаге мы научимся загружать образ Docker из стандартного ввода (STDIN). Это альтернативный способ загрузки архивов образов, особенно полезный при передаче вывода команды docker save напрямую в docker load.

Сначала удалим образ hello-world, который мы загрузили и сохранили на предыдущем шаге. Это гарантирует, что мы загружаем образ именно из архива, а не используем существующий.

docker rmi hello-world

Вы должны увидеть вывод, подтверждающий удаление образа.

Untagged: hello-world:latest
Deleted: sha256:...

Теперь воспользуемся командой cat для вывода содержимого файла hello-world.tar в стандартный вывод, а затем перенаправим этот вывод в команду docker load.

cat ~/project/hello-world.tar | docker load

Команда docker load при использовании без флага --input читает архив образа из STDIN. Вы должны увидеть вывод, показывающий загрузку слоёв образа.

...
Loaded image: hello-world:latest

Чтобы убедиться в успешной загрузке образа, можно вывести список доступных образов Docker.

docker images

В выводе должен отображаться образ hello-world.

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

Таким образом мы продемонстрировали, как загружать образ Docker из файла архива через STDIN.

Загрузка образа Docker из файла с использованием --input

На этом шаге мы научимся загружать образ Docker из файла с использованием флага --input в команде docker load. Это наиболее распространённый способ загрузки архивов образов из файлов.

Сначала снова удалим образ hello-world, чтобы убедиться, что мы загружаем его именно из архивного файла.

docker rmi hello-world

Вы должны увидеть вывод, подтверждающий удаление образа.

Untagged: hello-world:latest
Deleted: sha256:...

Теперь воспользуемся командой docker load с флагом --input, указав путь к файлу hello-world.tar, созданному на первом шаге.

docker load --input ~/project/hello-world.tar

Флаг --input указывает docker load читать архив образа из указанного файла вместо STDIN. Вы должны увидеть вывод, аналогичный загрузке через STDIN, показывающий загрузку слоёв образа.

...
Loaded image: hello-world:latest

Для подтверждения успешной загрузки образа снова выведем список образов Docker.

docker images

Образ hello-world должен присутствовать в списке.

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

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

Загрузка варианта для конкретной платформы с использованием --platform

На этом шаге мы рассмотрим, как загрузить вариант Docker-образа для конкретной платформы из архива с использованием флага --platform. Это особенно полезно, когда архив образа содержит варианты для нескольких архитектур (например, linux/amd64, linux/arm64).

Сначала снова удалим образ hello-world, чтобы начать с чистого листа.

docker rmi hello-world

Вы должны увидеть вывод, подтверждающий удаление образа.

Untagged: hello-world:latest
Deleted: sha256:...

Теперь воспользуемся командой docker load с флагом --input для указания архивного файла и флагом --platform для выбора нужной платформы. В этом примере мы укажем linux/amd64 — архитектуру виртуальной машины LabEx.

docker load --input ~/project/hello-world.tar --platform linux/amd64

Флаг --platform гарантирует, что Docker загрузит только вариант образа, соответствующий указанной архитектуре и операционной системе. Хотя образ hello-world очень простой и вряд ли содержит значительные различия между платформами, этот пример демонстрирует использование флага. Вы должны увидеть вывод, показывающий загрузку слоёв.

...
Loaded image: hello-world:latest

Для подтверждения успешной загрузки образа выведем список образов Docker.

docker images

Образ hello-world должен присутствовать в списке.

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

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

Итоги

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

Затем мы рассмотрели различные методы загрузки Docker-образов из архивов с помощью команды docker load. Мы научились загружать образ из стандартного ввода (STDIN), что полезно для операций с конвейерами, а также загружать образ напрямую из файла с использованием флага --input. Наконец, мы узнали, как загрузить вариант образа для конкретной платформы из архива с помощью флага --platform, продемонстрировав гибкость команды docker load для работы с мультиплатформенными образами.