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

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

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

Введение

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

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


Skills Graph

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

Вывод списка существующих образов

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

Для вывода списка образов вы можете использовать команду docker images. Эта команда показывает список всех образов, которые Docker загрузил или создал на вашем компьютере.

Давайте попробуем. Откройте терминал и выполните следующую команду:

docker images

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

REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
ubuntu        latest    270000000000   2 weeks ago    77.8MB
hello-world   latest    d00000000000   2 months ago   13.3kB

Вывод содержит несколько элементов информации о каждом образе:

  • REPOSITORY: Название образа.
  • TAG: Конкретная версия образа. latest - это тег по умолчанию, если не указан другой.
  • IMAGE ID: Уникальный идентификатор образа.
  • CREATED: Сколько времени назад был создан образ.
  • SIZE: Размер образа.

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

Попытка удалить образ с несколькими тегами

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

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

docker pull hello-world

Теперь давайте добавим другой тег к этому образу с помощью команды docker tag. Синтаксис: docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]. Мы добавим тег hello-world:mytag к образу hello-world:latest.

docker tag hello-world:latest hello-world:mytag

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

docker images

Вы должны увидеть две записи для hello-world, одна с тегом latest, а другая с тегом mytag, но у обеих будет один и тот же IMAGE ID.

REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
ubuntu        latest    270000000000   2 weeks ago    77.8MB
hello-world   latest    d00000000000   2 months ago   13.3kB
hello-world   mytag     d00000000000   2 months ago   13.3kB

Теперь давайте попробуем удалить образ, используя один из тегов, например, hello-world:latest, с помощью команды docker rmi.

docker rmi hello-world:latest

Вы заметите, что Docker на самом деле не удаляет данные образа. Вместо этого он удаляет конкретный тег, который вы указали. В выводе будет указано, что он был "Отмечен как неиспользуемый (Untagged)".

Untagged: hello-world:latest

Если вы снова выведете список образов, вы увидите, что запись hello-world:latest исчезла, но запись hello-world:mytag (с тем же IMAGE ID) по-прежнему существует.

docker images
REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
ubuntu        latest    270000000000   2 weeks ago    77.8MB
hello-world   mytag     d00000000000   2 months ago   13.3kB

Это показывает, что когда у образа есть несколько тегов, удаление одного тега удаляет только конкретную ссылку на данные образа. Само изображение удаляется только тогда, когда удаляется последний тег, указывающий на него, или когда вы явно удаляете его по его идентификатору (о чем мы поговорим позже).

Удаление образа по тегу

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

В настоящее время у нас есть образ hello-world с тегом mytag. Давайте убедимся в этом, выведя список образов:

docker images

Вы должны увидеть запись hello-world:mytag.

REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
ubuntu        latest    270000000000   2 weeks ago    77.8MB
hello-world   mytag     d00000000000   2 months ago   13.3kB

Теперь давайте удалим образ hello-world с использованием тега mytag с помощью команды docker rmi:

docker rmi hello-world:mytag

На этот раз, так как mytag был единственным тегом, ссылающимся на этот идентификатор образа, Docker удалит как тег, так и базовые данные образа. В выводе будет показано, что он был "Отмечен как неиспользуемый (Untagged)", а затем "Удален (Deleted)".

Untagged: hello-world:mytag
Deleted: sha256:d000000000000000000000000000000000000000000000000000000000000000
Deleted: sha256:0000000000000000000000000000000000000000000000000000000000000000
... (более строк с пометкой Deleted)

Давайте снова выведем список образов, чтобы убедиться, что образ hello-world удален:

docker images

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

REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
ubuntu        latest    270000000000   2 weeks ago    77.8MB

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

Удаление образа по идентификатору с использованием принудительного режима

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

Сначала давайте загрузим образ, который мы затем удалим по идентификатору. Мы будем использовать образ ubuntu. Если у вас он уже есть, загрузка будет быстрой.

docker pull ubuntu

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

docker images

Найдите образ ubuntu в выводе и запишите его IMAGE ID. Это будет длинная строка шестнадцатеричных символов. Вам нужно только первые несколько символов (обычно 3 или больше), чтобы уникально идентифицировать образ.

REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
ubuntu        latest    270000000000   2 weeks ago    77.8MB

Сначала попробуем удалить образ по его идентификатору без использования опции принудительного удаления. Замените YOUR_IMAGE_ID на фактический идентификатор образа, который вы записали из вывода команды docker images.

docker rmi YOUR_IMAGE_ID

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

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

docker run -d ubuntu sleep 3600

Эта команда запускает контейнер Ubuntu в отсоединенном режиме (-d) и держит его запущенным на протяжении часа (sleep 3600).

Теперь попробуйте снова удалить образ ubuntu по его идентификатору без опции принудительного удаления.

docker rmi YOUR_IMAGE_ID

Вы должны получить сообщение об ошибке, похожее на следующее:

Error response from daemon: conflict: unable to remove repository reference "ubuntu:latest" (must force) - image is referenced by one or more containers: 000000000000 (created ...)

Эта ошибка возникает, потому что контейнер использует образ. Чтобы удалить образ, который используется контейнером, вам нужно использовать опцию принудительного удаления (-f).

Теперь давайте удалим образ по его идентификатору с использованием опции принудительного удаления. Замените YOUR_IMAGE_ID на фактический идентификатор образа.

docker rmi -f YOUR_IMAGE_ID

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

Untagged: ubuntu:latest
Deleted: sha256:2700000000000000000000000000000000000000000000000000000000000000
Deleted: sha256:0000000000000000000000000000000000000000000000000000000000000000
... (более строк с пометкой Deleted)

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

docker images

Образ ubuntu больше не должен быть в списке.

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

Удаление образа по дайджесту (digest)

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

Сначала давайте загрузим образ, который мы сможем удалить по дайджесту. В этом примере мы будем использовать образ alpine.

docker pull alpine

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

docker images --digests

Найдите образ alpine в выводе. Вы увидите столбец DIGEST со значением, которое начинается с sha256:. Это и есть дайджест образа.

REPOSITORY    TAG       DIGEST                                                                    IMAGE ID       CREATED        SIZE
ubuntu        latest    <none>                                                                    270000000000   2 weeks ago    77.8MB
alpine        latest    sha256:0000000000000000000000000000000000000000000000000000000000000000   000000000000   3 weeks ago    5.59MB

Для удаления образа по его дайджесту используйте команду docker rmi, за которой следует имя образа и дайджест в формате REPOSITORY@DIGEST. Замените YOUR_ALPINE_DIGEST на фактический дайджест, который вы нашли в предыдущем выводе.

docker rmi alpine@YOUR_ALPINE_DIGEST

В выводе будет показано, что образ удален.

Deleted: sha256:0000000000000000000000000000000000000000000000000000000000000000
Deleted: sha256:0000000000000000000000000000000000000000000000000000000000000000
... (более строк с пометкой Deleted)

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

docker images

Образ alpine больше не должен быть в списке.

REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
ubuntu        latest    <none>                                                                    270000000000   2 weeks ago    77.8MB

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

Резюме

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

Затем мы изучили процесс удаления образов. Мы попытались удалить образ с несколькими тегами и обнаружили, что команда docker rmi удаляет только указанный тег, а не базовый идентификатор образа, если другие теги все еще ссылаются на него. Мы успешно удалили образ, указав его тег, и также показали, как удалить образ по его идентификатору, включая использование флага принудительного удаления (-f), если это необходимо. Наконец, мы научились удалять образ с использованием его дайджеста (digest), который представляет собой уникальный и неизменяемый идентификатор содержимого образа.