Как получить список и удалить образ Docker?
Опубликовано: 2021-08-03Docker — это хорошо известная платформа, которая позволяет вам управлять запуском и поставкой ваших приложений в виде контейнеров, которые упаковывают ОС и зависимые библиотеки вместе с вашим приложением.
Мы рассмотрим управление образами Docker, в основном рассказывая о том, как получить список образов Docker и получить необходимую информацию, а затем, опираясь на это обучение, эффективно удалить один или несколько образов.
Итак, приступим.
Список образов Docker
Чтобы получить список загруженных образов Docker, используйте:
abhisheknair@geekflare:~$ docker image ls REPOSITORY TAG IMAGE ID CREATED SIZE redis latest aa4d65e670d6 9 days ago 105MB mysql latest c60d96bd2b77 10 days ago 514MB ubuntu latest c29284518f49 2 weeks ago 72.8MB nginx latest 4cdc5dd7eaad 3 weeks ago 133MB hello-world latest d1165f221234 4 months ago 13.3kB redis 4.0 191c4017dcdd 15 months ago 89.3MB abhisheknair@geekflare:~$
Как и в случае с другими командами docker
, он поддерживает команду images
с несколькими параметрами.
$ docker images [OPTIONS] [REPOSITORY[:TAG]]
Если вы запускаете docker images
без каких-либо параметров, он покажет вам образы верхнего уровня, такие как docker image ls
, их репозиторий и теги, а также их размер на диске.
abhisheknair@geekflare:~$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE mysql latest c60d96bd2b77 10 days ago 514MB ubuntu latest c29284518f49 2 weeks ago 72.8MB nginx latest 4cdc5dd7eaad 3 weeks ago 133MB hello-world latest d1165f221234 4 months ago 13.3kB redis 4.0 191c4017dcdd 15 months ago 89.3MB abhisheknair@geekflare:~$
Эти образы имеют промежуточные слои, которые повышают удобство использования, ускоряют процесс сборки и уменьшают использование диска, что не отображается в приведенной выше команде. SIZE
— это объединенное пространство, занимаемое изображением и всеми его родительскими изображениями. Если вы сохраните содержимое образа в виде файла Tar при save
образа в докере, он будет равен указанному размеру.
Изображение отображается несколько раз, если оно имеет несколько имен или тегов репозитория, хотя одно изображение, идентифицированное его IMAGE ID
, использует указанный SIZE
только один раз.
Список самых последних изображений
abhisheknair@geekflare:~$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE mysql latest c60d96bd2b77 10 days ago 514MB ubuntu latest c29284518f49 2 weeks ago 72.8MB nginx latest 4cdc5dd7eaad 3 weeks ago 133MB hello-world latest d1165f221234 4 months ago 13.3kB redis 4.0 191c4017dcdd 15 months ago 89.3MB abhisheknair@geekflare:~$
Список изображений по репозиторию и тегу
Чтобы вывести список всех изображений, принадлежащих определенному репозиторию, укажите имя репозитория, например:
abhisheknair@geekflare:~$ docker images redis REPOSITORY TAG IMAGE ID CREATED SIZE redis latest aa4d65e670d6 9 days ago 105MB redis 4.0 191c4017dcdd 15 months ago 89.3MB abhisheknair@geekflare:~$
Вы можете дополнительно указать имя репозитория с тегом для более фильтрованного вывода:
abhisheknair@geekflare:~$ docker images redis:4.0 REPOSITORY TAG IMAGE ID CREATED SIZE redis 4.0 191c4017dcdd 15 months ago 89.3MB abhisheknair@geekflare:~$
Получение списка идентификаторов полноразмерных изображений
Чтобы перечислить все изображения без усечения IMAGE ID
, используйте:
abhisheknair@geekflare:~$ docker images --no-trunc REPOSITORY TAG IMAGE ID CREATED SIZE redis latest sha256:aa4d65e670d6518e5da96ca9d1a76370a942970a8802e6d5cc6bcf058ab12ca7 9 days ago 105MB mysql latest sha256:c60d96bd2b771a8e3cae776e02e55ae914a6641139d963defeb3c93388f61707 10 days ago 514MB ubuntu latest sha256:c29284518f497b8c5f49933e74e43ca5221e69c8251e780427f7d12f716625ff 2 weeks ago 72.8MB nginx latest sha256:4cdc5dd7eaadff5080649e8d0014f2f8d36d4ddf2eff2fdf577dd13da85c5d2f 3 weeks ago 133MB hello-world latest sha256:d1165f2212346b2bab48cb01c1e39ee8ad1be46b87873d9ca7a4e434980a7726 4 months ago 13.3kB redis 4.0 sha256:191c4017dcdd3370f871a4c6e7e1d55c7d9abed2bebf3005fb3e7d12161262b8 15 months ago 89.3MB abhisheknair@geekflare:~$
Получение списка дайджестов изображений
Образы Docker, использующие формат версии 2 или более поздней, имеют идентификатор с адресацией по содержимому, известный как digest
. Чтобы получить список значений дайджеста изображения, используйте флаг --digest
как:
abhisheknair@geekflare:~$ docker images --digests REPOSITORY TAG DIGEST IMAGE ID CREATED SIZE redis latest sha256:cd0c68c5479f2db4b9e2c5fbfdb7a8acb77625322dd5b474578515422d3ddb59 aa4d65e670d6 9 days ago 105MB mysql latest sha256:8b928a5117cf5c2238c7a09cd28c2e801ac98f91c3f8203a8938ae51f14700fd c60d96bd2b77 10 days ago 514MB ubuntu latest sha256:b3e2e47d016c08b3396b5ebe06ab0b711c34e7f37b98c9d37abe794b71cea0a2 c29284518f49 2 weeks ago 72.8MB nginx latest sha256:c5aab9d8e259d54af91e0548abf1fa8188a43079eb86b6ba8df9f482a5380720 4cdc5dd7eaad 3 weeks ago 133MB hello-world latest sha256:df5f5184104426b65967e016ff2ac0bfcd44ad7899ca3bbcf8e44e4461491a9e d1165f221234 4 months ago 13.3kB redis 4.0 sha256:2e03fdd159f4a08d2165ca1c92adde438ae4e3e6b0f74322ce013a78ee81c88d 191c4017dcdd 15 months ago 89.3MB abhisheknair@geekflare:~$
В реестре 2.0
вы можете использовать эти дайджесты с командами push
, pull
, create
, run
и rmi
. Это также работает с командой FROM
в Dockerfile
.
Фильтрация вывода
Команда docker
поддерживает фильтрацию images
с помощью флага --filter
. В настоящее время поддерживаются следующие фильтры:
- висячий (логическое значение — истина или ложь)
- метка (
label=<key>
илиlabel=<key>=<value>
) - before (
<image-name>[:<tag>]
,<image id>
или<image@digest>
) — фильтровать изображения, созданные до заданного идентификатора или ссылки - Поскольку (
<image-name>[:<tag>]
,<image id>
или<image@digest>
) — фильтровать изображения, созданные после заданного идентификатора или ссылки - ссылка (шаблон ссылки на изображение) — отфильтровать изображения, ссылка на которые соответствует указанному шаблону.
Кроме того, вы можете использовать несколько фильтров, комбинируя их, например:
$ docker images --filter "<key1>=<value1>" --filter"<key2>=<value2>"
Пример:
abhisheknair@geekflare:~$ docker images --filter "before=redis" --filter "since=hello-world" REPOSITORY TAG IMAGE ID CREATED SIZE mysql latest c60d96bd2b77 10 days ago 514MB ubuntu latest c29284518f49 2 weeks ago 72.8MB nginx latest 4cdc5dd7eaad 3 weeks ago 133MB abhisheknair@geekflare:~$
Форматирование вывода
docker images
поддерживают форматирование вывода, которое может понадобиться для вложения других команд, сценариев и т. д. Вот поддерживаемые заполнители для флага --format
:
Заполнитель | Описание |
---|---|
.ID | Идентификатор изображения |
.Repository | Репозиторий изображений |
.Tag | Тег изображения |
.Digest | Дайджест изображения |
.CreatedSince | Прошедшее время с момента создания образа |
.CreatedAt | Время создания образа |
.Size | Размер диска изображения |
В качестве примера приведенная ниже команда выводит вывод без заголовков и выводит ID
и Repository
, разделенные двоеточием ( : ) для всех изображений:
abhisheknair@geekflare:~$ docker images --format "{{.ID}}: {{.Repository}}" aa4d65e670d6: redis c60d96bd2b77: mysql c29284518f49: ubuntu 4cdc5dd7eaad: nginx d1165f221234: hello-world 191c4017dcdd: redis abhisheknair@geekflare:~$
Или, чтобы перечислить все изображения с их репозиторием и тегом в формате таблицы, вы можете использовать:
abhisheknair@geekflare:~$ docker images --format "table {{.ID}}\t{{.Repository}}\t{{.Tag}}" IMAGE ID REPOSITORY TAG aa4d65e670d6 redis latest c60d96bd2b77 mysql latest c29284518f49 ubuntu latest 4cdc5dd7eaad nginx latest d1165f221234 hello-world latest 191c4017dcdd redis 4.0 abhisheknair@geekflare:~$
Удаление образов Docker
Чтобы удалить один или несколько образов Docker из системы, мы используем:

$ docker image rm [OPTIONS] IMAGE [IMAGE...]
Чтобы удалить одно изображение, просто укажите имя изображения:
abhisheknair@geekflare:~$ docker image rm redis Untagged: redis:latest Untagged: redis@sha256:cd0c68c5479f2db4b9e2c5fbfdb7a8acb77625322dd5b474578515422d3ddb59 Deleted: sha256:aa4d65e670d6518e5da96ca9d1a76370a942970a8802e6d5cc6bcf058ab12ca7 Deleted: sha256:3bd00d38f5ca70200050477c527cc60cfdf82911d6fe03932e2bcae31a95cfa2 Deleted: sha256:22722fde392d188cfbe5bbd0c2451cc71cf5b000afc0e5114c1066bb5e113ec9 Deleted: sha256:38212b55ef525e86cd726cd83c1a82a6009c68d24771d6e93d439fdc88e66f0e Deleted: sha256:188c498579cef37b65a93d6448c6b129fa07d5740fc213a18843ff22d80cd10d Deleted: sha256:2117165cd53c98f13ec7af36c9d8acd239fc541c847efaccb49885decf615d68 abhisheknair@geekflare:~$
Или, чтобы удалить несколько изображений, укажите несколько имен изображений, разделенных пробелом:
abhisheknair@geekflare:~$ docker image rm redis mariadb Untagged: redis:latest Untagged: redis@sha256:cd0c68c5479f2db4b9e2c5fbfdb7a8acb77625322dd5b474578515422d3ddb59 Deleted: sha256:aa4d65e670d6518e5da96ca9d1a76370a942970a8802e6d5cc6bcf058ab12ca7 Deleted: sha256:3bd00d38f5ca70200050477c527cc60cfdf82911d6fe03932e2bcae31a95cfa2 Deleted: sha256:22722fde392d188cfbe5bbd0c2451cc71cf5b000afc0e5114c1066bb5e113ec9 Deleted: sha256:38212b55ef525e86cd726cd83c1a82a6009c68d24771d6e93d439fdc88e66f0e Deleted: sha256:188c498579cef37b65a93d6448c6b129fa07d5740fc213a18843ff22d80cd10d Deleted: sha256:2117165cd53c98f13ec7af36c9d8acd239fc541c847efaccb49885decf615d68 Untagged: mariadb:latest Untagged: mariadb@sha256:3b6f9fa1d406e168998d62501b2ee4f27d53138bebfcdac03540758996c5ff1d Deleted: sha256:fd17f57768027456cc17987058474fb21d3c51e9dd764e4497c1dfe92ff058db Deleted: sha256:a638f04e531b032c81a84bda59a36d1df3c4cec62560c403bc2edb642bce79ba Deleted: sha256:af7a7e7bf72e7ad0c5227995f219d9094fafbe0ac973dbe7eb4ab190a5a58ba5 Deleted: sha256:a0cfd81b291e8da6bca0731c9db70fe1b61d176906b1cf05ade1cd61572ffaaa Deleted: sha256:38b00cb5dab64398092fab2b18563af1ef4a9445dec8a531ac725059dc218f41 Deleted: sha256:6e60d29d2d76125f989f503a78729984f7ba3e26bfbf7038d5ab644b8755b7c2 Deleted: sha256:1dafdd60e471b4c1f5244cfe1d20d79f934f504ef42180b637886be2b0b74370 Deleted: sha256:2fffe8e736cdb99359084e297f4bb54a4cac879366bd3e4333d3dbe966f8e9a6 Deleted: sha256:f728037697805db453111266541c202c74971484ef359ea29b9c60064ed9e47e Deleted: sha256:28155a13db3520201db576bf6d56b68fc08ef27b1c4c49dbfeadef523d35c5f0 Deleted: sha256:7555a8182c42c7737a384cfe03a3c7329f646a3bf389c4bcd75379fc85e6c144 abhisheknair@geekflare:~$
Принудительное удаление
Могут быть запущены контейнеры, использующие образы, которые вы пытаетесь удалить. В таких случаях Docker выдаст вам предупреждение, когда вы попытаетесь удалить образ, на который указывает ссылка.
abhisheknair@geekflare:~$ docker image rm nginx Error response from daemon: conflict: unable to remove repository reference "nginx" (must force) - container ce908eadf829 is using its referenced image 4cdc5dd7eaad abhisheknair@geekflare:~$
Вы можете сначала остановить связанный контейнер, а затем повторить попытку или использовать флаг -f
, который вызывает удаление образа (будьте осторожны).
abhisheknair@geekflare:~$ docker image rm nginx -f Untagged: nginx:latest Untagged: nginx@sha256:c5aab9d8e259d54af91e0548abf1fa8188a43079eb86b6ba8df9f482a5380720 Deleted: sha256:4cdc5dd7eaadff5080649e8d0014f2f8d36d4ddf2eff2fdf577dd13da85c5d2f abhisheknair@geekflare:~$
Обрезать изображения
Есть определенные ситуации, когда неиспользуемые образы занимают место на диске или вам просто нужно очистить старые висящие образы. Вы можете очистить такие неиспользуемые изображения, используя:
$ docker image prune
Пример:
abhisheknair@geekflare:~$ docker image prune WARNING! This will remove all dangling images. Are you sure you want to continue? [y/N] y Total reclaimed space: 0B abhisheknair@geekflare:~$
Если вы хотите также очистить все изображения, которые не используются какими-либо контейнерами, используйте флаг -a
:
abhisheknair@geekflare:~$ docker image prune -a WARNING! This will remove all images without at least one container associated to them. Are you sure you want to continue? [y/N] y Deleted Images: untagged: mariadb:latest untagged: mariadb@sha256:3b6f9fa1d406e168998d62501b2ee4f27d53138bebfcdac03540758996c5ff1d deleted: sha256:fd17f57768027456cc17987058474fb21d3c51e9dd764e4497c1dfe92ff058db deleted: sha256:a638f04e531b032c81a84bda59a36d1df3c4cec62560c403bc2edb642bce79ba deleted: sha256:af7a7e7bf72e7ad0c5227995f219d9094fafbe0ac973dbe7eb4ab190a5a58ba5 deleted: sha256:a0cfd81b291e8da6bca0731c9db70fe1b61d176906b1cf05ade1cd61572ffaaa deleted: sha256:38b00cb5dab64398092fab2b18563af1ef4a9445dec8a531ac725059dc218f41 deleted: sha256:6e60d29d2d76125f989f503a78729984f7ba3e26bfbf7038d5ab644b8755b7c2 deleted: sha256:1dafdd60e471b4c1f5244cfe1d20d79f934f504ef42180b637886be2b0b74370 deleted: sha256:2fffe8e736cdb99359084e297f4bb54a4cac879366bd3e4333d3dbe966f8e9a6 deleted: sha256:f728037697805db453111266541c202c74971484ef359ea29b9c60064ed9e47e deleted: sha256:28155a13db3520201db576bf6d56b68fc08ef27b1c4c49dbfeadef523d35c5f0 deleted: sha256:7555a8182c42c7737a384cfe03a3c7329f646a3bf389c4bcd75379fc85e6c144 untagged: redis:latest untagged: redis@sha256:cd0c68c5479f2db4b9e2c5fbfdb7a8acb77625322dd5b474578515422d3ddb59 deleted: sha256:aa4d65e670d6518e5da96ca9d1a76370a942970a8802e6d5cc6bcf058ab12ca7 deleted: sha256:3bd00d38f5ca70200050477c527cc60cfdf82911d6fe03932e2bcae31a95cfa2 deleted: sha256:22722fde392d188cfbe5bbd0c2451cc71cf5b000afc0e5114c1066bb5e113ec9 deleted: sha256:38212b55ef525e86cd726cd83c1a82a6009c68d24771d6e93d439fdc88e66f0e deleted: sha256:188c498579cef37b65a93d6448c6b129fa07d5740fc213a18843ff22d80cd10d deleted: sha256:2117165cd53c98f13ec7af36c9d8acd239fc541c847efaccb49885decf615d68 Total reclaimed space: 445.2MB abhisheknair@geekflare:~$
Вы также можете использовать флаг --force
или -f
, чтобы продолжить очистку без подтверждения, или использовать флаг --filter
, чтобы указать значения фильтра (например, 'until=<timestamp>') для команды prune
.
Пример:
$ docker image prune -a --force --filter "until=2021-01-04T00:00:00"
Или же
$ docker image prune --filter="label=deprecated"
Использование команды rmi
Вы также можете использовать команду rmi
с докером для удаления изображений.
Он удаляет (и удаляет теги) одно или несколько изображений из узла Docker. Если изображение имеет несколько тегов, использование этой команды с тегом в качестве параметра удаляет только тег. Если тег является единственным для изображения, удаляются и изображение, и тег.
Эта команда не удаляет образы из реестра. Кроме того, вы не можете удалить образ работающего контейнера, если не используете параметр -f
, как в команде docker image rm
.
Пример:
abhisheknair@geekflare:~$ docker rmi alpine Untagged: alpine:latest Untagged: alpine@sha256:adab3844f497ab9171f070d4cae4114b5aec565ac772e2f2579405b78be67c96 Deleted: sha256:d4ff818577bc193b309b355b02ebc9220427090057b54a59e73b79bdfe139b83 Deleted: sha256:72e830a4dff5f0d5225cdc0a320e85ab1ce06ea5673acfe8d83a7645cbd0e9cf abhisheknair@geekflare:~$
Вы также можете использовать --no-prune
, чтобы указать не удалять непомеченных родителей.
Остановить контейнер и удалить образы
Во многих случаях вам может потребоваться остановить все контейнеры и удалить все связанные образы. Вы можете сделать это просто с помощью:
$ docker rm -vf $(docker ps -a -q)
Приведенная выше команда остановит и принудительно удалит все запущенные контейнеры. Затем мы можем приступить к удалению связанных изображений, используя:
$ docker rmi -f $(docker images -a -q)
Резюме
Docker — это универсальный инструмент, который является неотъемлемой частью арсенала современного DevOps-инженера и частью других популярных технологий, таких как Kubernetes. Управление образами Docker — одна из важнейших частей управления развертыванием Docker и устранения неполадок.
Теперь у вас должно быть общее представление о возможностях, которые команда docker
CLI предлагает с такими командами, как image
, images
и rmi
. Их флаги предлагают дополнительную настройку и предлагают расширенные параметры фильтрации и настройки, которые могут помочь в автоматизации и расширенном использовании.
Используйте docker [COMMAND] help
для получения дополнительных сведений о доступных параметрах и связанных разделах справки.