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

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

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

Введение

В этой лабораторной работе (Lab) вы научитесь использовать команду docker image import для создания образов Docker из различных источников. Вы изучите импорт образов напрямую с удаленного URL, импорт из локального tarball-архива с использованием стандартного ввода, импорт из локального tarball-архива с сообщением о коммите (commit message), а также импорт из локальной директории с новыми конфигурациями.

Благодаря практическим упражнениям вы получите опыт работы с различными опциями команды docker image import и научитесь проверять импортированные образы. Эта лабораторная работа даст вам навыки эффективного создания образов Docker из существующих tarball-архивов или директорий, обеспечивая гибкость в вашем рабочем процессе с Docker.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/ContainerOperationsGroup(["Container Operations"]) docker(("Docker")) -.-> docker/ImageOperationsGroup(["Image Operations"]) docker/ContainerOperationsGroup -.-> docker/run("Run a Container") docker/ContainerOperationsGroup -.-> docker/ls("List Containers") docker/ImageOperationsGroup -.-> docker/images("List Images") docker/ImageOperationsGroup -.-> docker/load("Load Image") subgraph Lab Skills docker/run -.-> lab-555154{{"Как использовать команду docker image import для создания образов"}} docker/ls -.-> lab-555154{{"Как использовать команду docker image import для создания образов"}} docker/images -.-> lab-555154{{"Как использовать команду docker image import для создания образов"}} docker/load -.-> lab-555154{{"Как использовать команду docker image import для создания образов"}} end

Импорт образа из удаленного URL

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

Сначала воспользуемся командой curl для загрузки тестового tarball-архива образа из удаленного URL. Для демонстрации мы будем использовать общедоступный tarball-архив образа.

curl -o ~/project/alpine.tar https://labex.io/images/alpine.tar

Эта команда загружает tarball-архив образа с указанного URL и сохраняет его как alpine.tar в вашей директории ~/project. Флаг -o указывает имя и расположение выходного файла.

Далее мы используем команду docker image import для импорта этого tarball-архива в вашу среду Docker. Команда import может принимать в качестве ввода URL или путь к файлу. При использовании URL Docker загружает содержимое напрямую и импортирует его.

docker image import https://labex.io/images/alpine.tar

Эта команда импортирует образ из удаленного URL. Docker загрузит tarball-архив и создаст новый образ из его содержимого. По умолчанию импортированный образ не будет иметь репозитория или тега.

Чтобы проверить, что образ был импортирован, вы можете вывести список доступных образов с помощью команды docker images.

docker images

Вы должны увидеть образ с <none> в полях REPOSITORY и TAG, а также недавнее время CREATED. Это только что импортированный образ.

Вы также можете импортировать образ и присвоить ему репозиторий и тег в процессе импорта. Для этого добавьте желаемый репозиторий и тег после URL.

docker image import https://labex.io/images/alpine.tar alpine:latest

Эта команда импортирует тот же образ, но помечает его как alpine:latest.

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

docker images

Теперь вы должны увидеть образ с репозиторием alpine и тегом latest.

Импорт образа из локального tarball-архива с использованием STDIN

На предыдущем шаге вы узнали, как импортировать образ Docker из удаленного URL. В этом шаге вы научитесь импортировать образ Docker из локального tarball-файла с использованием стандартного ввода (STDIN). Этот метод полезен, когда у вас есть локальный tarball-архив образа и вы хотите передать его содержимое напрямую в команду docker image import.

Сначала убедитесь, что у вас есть файл alpine.tar в директории ~/project из предыдущего шага. Если его нет, вы можете загрузить его снова с помощью curl:

curl -o ~/project/alpine.tar https://labex.io/images/alpine.tar

Теперь мы используем команду cat для чтения содержимого файла alpine.tar и передадим его в команду docker image import. Аргумент - для docker image import указывает на чтение из STDIN.

cat ~/project/alpine.tar | docker image import -

Эта команда читает файл alpine.tar и передает его содержимое как входные данные команде docker image import. Docker затем импортирует образ из полученных данных. Как и при импорте из URL без указания тега, импортированный образ по умолчанию не будет иметь репозитория или тега.

Чтобы проверить, что образ был импортирован, выведите список доступных образов:

docker images

Вы должны увидеть еще один образ с <none> в полях REPOSITORY и TAG.

Вы также можете указать репозиторий и тег при импорте из STDIN. Синтаксис аналогичен импорту из URL.

cat ~/project/alpine.tar | docker image import - alpine:stdin

Эта команда импортирует образ из STDIN и помечает его как alpine:stdin.

Снова выведите список образов для подтверждения нового тега:

docker images

Теперь вы должны увидеть образ с репозиторием alpine и тегом stdin.

Использование STDIN — это гибкий способ импорта образов, особенно при объединении команд или работе со сжатыми tarball-архивами, когда вы можете распаковать и импортировать образ за один шаг.

Импорт образа из локального tarball-архива с сообщением о коммите

В предыдущих шагах вы импортировали образы из URL и STDIN. В этом шаге вы узнаете, как импортировать образ из локального tarball-файла и добавить сообщение о коммите в процессе импорта. Добавление сообщения о коммите поможет вам документировать происхождение или назначение импортированного образа.

Сначала убедитесь, что у вас есть файл alpine.tar в директории ~/project. Если его нет, загрузите его:

curl -o ~/project/alpine.tar https://labex.io/images/alpine.tar

Теперь мы используем команду docker image import с флагом -m для добавления сообщения о коммите. Мы также укажем путь к локальному файлу в качестве источника.

docker image import -m "Imported alpine base image" ~/project/alpine.tar alpine:commit

В этой команде:

  • -m "Imported alpine base image" добавляет указанное сообщение о коммите в историю образа
  • ~/project/alpine.tar — путь к локальному tarball-файлу
  • alpine:commit — желаемые репозиторий и тег для импортированного образа

После выполнения этой команды Docker импортирует образ из локального tarball-архива и применит сообщение о коммите.

Чтобы проверить импорт и сообщение о коммите, вы можете изучить образ с помощью команды docker image history.

docker image history alpine:commit

Эта команда показывает историю образа alpine:commit. В колонке COMMENT вы должны увидеть запись с сообщением "Imported alpine base image".

Вы также можете вывести список образов для подтверждения нового тега:

docker images

Вы должны увидеть образ с репозиторием alpine и тегом commit.

Добавление сообщений о коммитах — это хорошая практика для отслеживания изменений и происхождения ваших Docker-образов, особенно при импорте из внешних источников.

Импорт образа из локальной директории с новыми конфигурациями

В предыдущих шагах вы импортировали образы из tarball-файлов. В этом шаге вы узнаете, как импортировать образ из локальной директории и применить новые конфигурации в процессе импорта. Это полезно, когда у вас есть снимок файловой системы в директории и вы хотите преобразовать его в Docker-образ с определенными настройками, такими как команда для запуска.

Сначала создадим простую структуру директорий и файл, который будет включен в наш образ.

mkdir ~/project/myimage
echo "Hello, Docker!" > ~/project/myimage/hello.txt

Эта команда создает директорию myimage внутри вашей директории ~/project и файл hello.txt с текстом "Hello, Docker!".

Теперь мы используем команду docker image import для импорта содержимого директории ~/project/myimage. Мы также используем флаг -c для указания изменений конфигурации образа. В данном случае мы установим инструкцию CMD, которая определяет команду по умолчанию для выполнения при запуске контейнера из этого образа.

docker image import -c 'CMD ["/bin/cat", "/hello.txt"]' ~/project/myimage myimage:latest

В этой команде:

  • -c 'CMD ["/bin/cat", "/hello.txt"]' устанавливает команду по умолчанию для образа как /bin/cat /hello.txt. Флаг -c позволяет применять инструкции Dockerfile, такие как CMD, ENTRYPOINT, ENV, EXPOSE, LABEL, ONBUILD, STOPSIGNAL, USER и WORKDIR.
  • ~/project/myimage — путь к локальной директории с содержимым файловой системы
  • myimage:latest — желаемые репозиторий и тег для импортированного образа

После выполнения этой команды Docker создаст новый образ на основе содержимого директории ~/project/myimage и применит указанную конфигурацию CMD.

Для проверки импорта и конфигурации выведите список образов:

docker images

Вы должны увидеть образ с репозиторием myimage и тегом latest.

Теперь запустим контейнер из этого образа, чтобы проверить, правильно ли применена инструкция CMD.

docker run myimage:latest

Эта команда запускает контейнер из образа myimage:latest. Поскольку мы установили CMD как /bin/cat /hello.txt, контейнер должен выполнить эту команду и вывести содержимое файла hello.txt, то есть "Hello, Docker!".

Вы должны увидеть "Hello, Docker!" в вашем терминале. Это подтверждает, что содержимое директории было успешно импортировано, а конфигурация CMD применена корректно.

Итоги

В этой лабораторной работе мы изучили, как использовать команду docker image import для создания Docker-образов из различных источников. Мы начали с импорта образа напрямую из удаленного URL, продемонстрировав, как загрузить tarball-архив образа, размещенный в интернете, без ручной загрузки. Для этого мы использовали curl для скачивания тестового tarball-архива, а затем команду docker image import с URL в качестве входа, показав, как выполнить импорт с указанием и без указания репозитория и тега.

Последующие шаги, хотя и не полностью детализированные в предоставленном материале, вероятно, охватывали бы импорт образов из локальных tarball-файлов с использованием STDIN, импорт с сообщением о коммите для лучшего отслеживания, а также импорт из локальной директории с применением новых конфигураций. Эти шаги дополнительно продемонстрировали бы гибкость и различные варианты использования команды docker image import для создания и управления Docker-образами.