Как использовать команду docker image ls для перечисления и фильтрации образов

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

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

Введение

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

Кроме того, вы изучите фильтрацию образов на основе их статуса "висячих" (dangling) и применением меток (labels). Наконец, вы научитесь настраивать формат вывода команды docker images с использованием пользовательского шаблона для более индивидуального отображения информации.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/ContainerOperationsGroup(["Container Operations"]) docker(("Docker")) -.-> docker/ImageOperationsGroup(["Image Operations"]) docker(("Docker")) -.-> docker/DockerfileGroup(["Dockerfile"]) docker/ContainerOperationsGroup -.-> docker/ls("List Containers") docker/ImageOperationsGroup -.-> docker/pull("Pull Image from Repository") docker/ImageOperationsGroup -.-> docker/images("List Images") docker/DockerfileGroup -.-> docker/build("Build Image from Dockerfile") subgraph Lab Skills docker/ls -.-> lab-555157{{"Как использовать команду docker image ls для перечисления и фильтрации образов"}} docker/pull -.-> lab-555157{{"Как использовать команду docker image ls для перечисления и фильтрации образов"}} docker/images -.-> lab-555157{{"Как использовать команду docker image ls для перечисления и фильтрации образов"}} docker/build -.-> lab-555157{{"Как использовать команду docker image ls для перечисления и фильтрации образов"}} end

Перечисление всех верхнеуровневых образов

На этом этапе вы научитесь перечислять все верхнеуровневые Docker-образы на вашей системе. Верхнеуровневые образы - это образы, которые вы явно загружаете (pull) или создаете (build). Это не промежуточные образы, созданные в процессе сборки.

Для перечисления всех верхнеуровневых образов вы можете использовать команду docker images. Эта команда отобразит таблицу с информацией о каждом образе, включая репозиторий, тег, идентификатор образа (image ID), время создания и размер.

Давайте попробуем перечислить образы. Поскольку это новый (чистый) рабочий процесс, изначально может не быть многих образов. Мы загрузим образ на следующем этапе.

Откройте терминал в директории ~/project и выполните следующую команду:

docker images

Вы должны увидеть вывод, похожий на следующий (точный вывод может отличаться в зависимости от имеющихся образов):

REPOSITORY    TAG       IMAGE ID       CREATED       SIZE

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

Перечисление образов по имени и тегу

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

Команда docker images позволяет указать имя репозитория и, по желанию, тег для фильтрации вывода. Формат команды: docker images [REPOSITORY[:TAG]].

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

Выполните следующую команду, чтобы загрузить образ 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, давайте перечислим только этот образ, используя его имя.

Выполните следующую команду:

docker images hello-world

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

REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
hello-world   latest    <image_id>     <created_time>   <size>

Вы также можете указать тег. Поскольку мы загрузили образ с тегом latest, давайте перечислим образ hello-world с тегом latest.

Выполните следующую команду:

docker images hello-world:latest

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

REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
hello-world   latest    <image_id>     <created_time>   <size>

Если вы попытаетесь перечислить образ, который не существует, вы получите пустой вывод. Например:

docker images non-existent-image

Вывод:

REPOSITORY    TAG       IMAGE ID       CREATED       SIZE

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

Фильтрация образов по статусу "висячих" (dangling)

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

Для фильтрации образов по их статусу "висячих" вы можете использовать флаг --filter с ключом dangling. Значением может быть true, чтобы показать только висячие образы, или false, чтобы показать только невисячие образы.

Сначала давайте создадим висячий образ. Мы можем сделать это, создав новый образ, который заменит существующий. Для этого мы используем простой Dockerfile.

Создайте файл с именем Dockerfile в директории ~/project со следующим содержимым:

FROM alpine
CMD ["echo", "Hello, world!"]

Этот Dockerfile очень простой. Он использует образ alpine в качестве базового и просто выводит "Hello, world!" при запуске контейнера на его основе.

Теперь давайте создадим образ из этого Dockerfile и пометим его.

Выполните следующую команду, чтобы создать образ и пометить его как my-image:latest:

docker build -t my-image:latest .

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

[+] Building
...
Successfully built <image_id>
Successfully tagged my-image:latest

Теперь давайте немного изменим Dockerfile и снова соберем его с тем же тегом. Это создаст новый образ с тегом my-image:latest, и предыдущий образ с этим тегом станет висячим.

Отредактируйте Dockerfile в директории ~/project, чтобы изменить команду:

FROM alpine
CMD ["echo", "Hello again!"]

Теперь снова соберите образ с тем же тегом:

docker build -t my-image:latest .

Вы увидите вывод, аналогичный предыдущей сборке, но будет сгенерирован новый идентификатор образа. Предыдущий образ с тегом my-image:latest теперь является висячим.

Давайте перечислим все образы, чтобы увидеть висячий образ.

Выполните команду:

docker images

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

REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
my-image      latest    <new_image_id> <created_time>   <size>
<none>        <none>    <old_image_id> <created_time>   <size>
hello-world   latest    <image_id>     <created_time>   <size>

Теперь давайте отфильтруем, чтобы показать только висячие образы, используя флаг --filter dangling=true.

Выполните команду:

docker images --filter dangling=true

Вы должны увидеть только висячий образ:

REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
<none>        <none>    <old_image_id> <created_time>   <size>

Чтобы увидеть только невисячие образы, вы можете использовать --filter dangling=false.

Выполните команду:

docker images --filter dangling=false

Это перечислит все образы, которые не являются висячими:

REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
my-image      latest    <new_image_id> <created_time>   <size>
hello-world   latest    <image_id>     <created_time>   <size>

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

Фильтрация образов по меткам (label)

На этом этапе вы научитесь фильтровать Docker-образы на основе меток (label). Метки - это пары ключ-значение, которые вы можете прикрепить к объектам Docker, включая образы. Они полезны для организации и идентификации образов.

Для фильтрации образов по метке используйте флаг --filter с ключом label. Значением может быть одна метка (label=<ключ>=<значение>) или только ключ метки (label=<ключ>), чтобы найти образы с такой меткой, независимо от ее значения.

Сначала создадим новый Dockerfile, который включает метки.

Создайте файл с именем Dockerfile.labeled в директории ~/project со следующим содержимым:

FROM alpine
LABEL maintainer="LabEx User"
LABEL version="1.0"
CMD ["echo", "Image with labels!"]

Этот Dockerfile похож на предыдущий, но включает две инструкции LABEL.

Теперь создадим образ из этого Dockerfile и пометим его.

Выполните следующую команду, чтобы создать образ и пометить его как labeled-image:latest:

docker build -t labeled-image:latest -f Dockerfile.labeled .

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

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

Выполните команду:

docker images

Вы должны увидеть labeled-image в списке вместе с другими образами.

REPOSITORY      TAG       IMAGE ID       CREATED        SIZE
labeled-image   latest    <image_id>     <created_time>   <size>
my-image        latest    <new_image_id> <created_time>   <size>
<none>          <none>    <old_image_id> <created_time>   <size>
hello-world     latest    <image_id>     <created_time>   <size>

Теперь отфильтруем образы по метке maintainer. Мы отфильтруем образы, у которых метка maintainer имеет значение "LabEx User".

Выполните команду:

docker images --filter label=maintainer=LabEx User

Вы должны увидеть только labeled-image:

REPOSITORY      TAG       IMAGE ID       CREATED        SIZE
labeled-image   latest    <image_id>     <created_time>   <size>

Вы также можете фильтровать только по ключу метки, независимо от значения. Отфильтруем образы, которые имеют метку version.

Выполните команду:

docker images --filter label=version

Вы снова должны увидеть только labeled-image:

REPOSITORY      TAG       IMAGE ID       CREATED        SIZE
labeled-image   latest    <image_id>     <created_time>   <size>

Это демонстрирует, как фильтровать образы с использованием меток.

Форматирование вывода с использованием пользовательского шаблона

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

Команда docker images поддерживает флаг --format, который позволяет вам указать шаблон на языке Go для управления выводом. Вы можете использовать различные заполнители в шаблоне для доступа к различным атрибутам образа.

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

Выполните следующую команду:

docker images --format "{{.ID}}: {{.Repository}}"

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

<image_id>: hello-world
<new_image_id>: my-image
<old_image_id>: <none>
<image_id>: labeled-image

Обратите внимание, что для висячего образа в репозитории все еще отображается <none>.

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

Выполните следующую команду:

docker images --format "table {{.Repository}}\t{{.Tag}}\t{{.Size}}"

Использование table в начале строки формата создает табличный вывод с заголовками.

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

REPOSITORY          TAG                 SIZE
hello-world         latest              <size>
my-image            latest              <size>
<none>              <none>              <size>
labeled-image       latest              <size>

Вы можете найти список доступных заполнителей в документации Docker для команды docker images. Некоторые распространенные заполнители включают:

  • .ID: Идентификатор образа
  • .Repository: Имя репозитория образа
  • .Tag: Тег образа
  • .Created: Время создания образа
  • .Size: Размер образа
  • .Containers: Количество контейнеров, использующих образ

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

docker images --format "{{.ID}} created at {{.Created}}"

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

Итоги

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

Вы также исследовали, как фильтровать образы на основе их статуса "висячего" (dangling) и по определенным меткам. Наконец, вы научились настраивать формат вывода команды docker images с использованием пользовательского шаблона, что позволяет отображать только необходимую информацию.