ИТ Блог. Администрирование серверов на основе Linux (Ubuntu, Debian, CentOS, openSUSE)

Полное руководство по удалению образов Docker

Установить Docker 1.11 на Ubuntu 16.04 LTS x64

Если вы продолжите создавать образы докеров, у вас скоро начнется заканчиваться свободное место. Удаление старых и неиспользуемых образов Docker освободит для вас много места на диске.

В этой статье мы расскажем о различных сценариях удаления образов Docker из вашей системы.

 

Способы удаления образов Docker

Сначала проверьте образы Docker, присутствующие в вашей системе, с помощью этой команды:

docker images

 

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

andreyex@destroyer:~$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
debian              latest              67e34c1c9477        2 weeks ago         114MB
ubuntu              latest              775349758637        6 weeks ago         64.2MB

 

С помощью идентификатора изображения вы можете удалить образ Docker следующим образом:

docker rmi image_name_or_id

 

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

docker image rm image_id

 

Вот как может выглядеть вывод:

andreyex@destroyer:~$ docker rmi 67e34c1c9477
Untagged: debian:latest
Untagged: debian@sha256:79f0b1682af1a6a29ff63182c8103027f4de98b22d8fb50040e9c4bb13e3de78
Deleted: sha256:67e34c1c9477023c0ce84c20ae5af961a6509f9952c2ebbf834c5ea0a286f2b8
Deleted: sha256:f2b4f0674ba3e6119088fe8a98c7921ed850c48d4d76e8caecd7f3d57721b4cb

 

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

 

Удалить образ Docker, связанный с контейнером

Жизнь была бы намного проще, если бы вы могли просто удалить образы Docker. Но случается это не часто.

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

andreyex@destroyer:~$ docker rmi 775349758637
Error response from daemon: conflict: unable to delete 775349758637 (cannot be forced) - image is being used by running container 13dc0f4226dc

 

Сначала вы должны остановить контейнер:

andreyex@destroyer:~$ docker stop 13dc0f4226dc
13dc0f4226dc

 

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

andreyex@destroyer:~$ docker rmi 67e34c1c9477
Error response from daemon: conflict: unable to delete 67e34c1c9477 (must be forced) - image is being used by stopped container 5ced86b1fcee

 

У вас есть два варианта здесь:

Чтобы принудительно удалить образ Docker, вы можете использовать опцию -f:

docker rmi -f image_id

 

Чтобы удалить контейнер, а затем удалить изображение, вы можете использовать что-то вроде этого:

docker rm container_id
docker rmi image_id

 

Удалить образ Docker, связанный с несколькими контейнерами

Жизнь все равно была бы немного проще, если бы изображение Docker было связано только с одним контейнером. Но с изображением может быть связано несколько контейнеров, и удаление такого рода изображения Docker становится проблемой.

Вы увидите ошибку, подобную этой:

andreyex@itsfoss:~$ docker rmi 775349758637
Error response from daemon: conflict: unable to delete 775349758637 (must be forced) - image is referenced in multiple repositories

 

Во-первых, вам нужно найти все контейнеры, связанные с именем изображения (не ID).

docker ps -a -q --filter ancestor=docker_image_name

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

docker ps -a -q --filter ancestor=ubuntu | xargs docker stop

 

И тогда вы можете либо удалить остановленные контейнеры, либо принудительно удалить изображение (как вы видели в предыдущем разделе).

Если вы хотите удалить все контейнеры, связанные с изображением, просто запустите эту команду:

docker ps -a -q --filter ancestor=ubuntu | xargs docker rm

 

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

 

Удаление нескольких образов Docker одновременно

Вы также можете удалить несколько образов Docker в одной команде. Это так же, как предыдущая команда. Вам просто нужно указать идентификаторы изображений или имена изображений.

docker rmi image_id_1 image_id_2 image_id_3

 

Конечно, вам придется остановить все запущенные контейнеры, связанные с изображениями.

 

Удалите все неиспользуемые и висячие образы Docker сразу

Прежде чем вы увидите это, позвольте нам объяснить, что такое неиспользуемые и висящие изображения:

Любой образ Docker, с которым связаны любые типы контейнеров (остановлен или запущен), является используемым образом. Если с изображением Docker не связаны контейнеры, он становится неиспользуемым изображением Docker.

Висящий образ Docker означает, что вы создали новую сборку образа, но ему не дали новое имя. Таким образом, старые образы, которые у вас есть, становятся висящими. Эти старые изображения являются непомеченными и отображают <none> в своем имени, когда вы запускаете команду ‘docker images’.

Если вы хотите удалить висячие образы, вы можете использовать опцию prune:

docker image prune

 

Если вы хотите удалить неиспользуемые и висящие изображения одновременно, вы можете использовать prune с параметром -a:

docker image prune -a

 

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

andreyex@destroyer:~$ 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: ubuntu:latest
untagged: ubuntu@sha256:6e9f67fa63b0323e9a1e587fd71c561ba48a034504fb804fd26fd8800039835d
untagged: debian:latest
untagged: debian@sha256:79f0b1682af1a6a29ff63182c8103027f4de98b22d8fb50040e9c4bb13e3de78
deleted: sha256:67e34c1c9477023c0ce84c20ae5af961a6509f9952c2ebbf834c5ea0a286f2b8
deleted: sha256:f2b4f0674ba3e6119088fe8a98c7921ed850c48d4d76e8caecd7f3d57721b4cb
untagged: fedora:latest
untagged: fedora@sha256:d4f7df6b691d61af6cee7328f82f1d8afdef63bc38f58516858ae3045083924a
deleted: sha256:f0858ad3febdf45bb2e5501cb459affffacef081f79eaa436085c3b6d9bd46ca
deleted: sha256:2ae3cee18c8ef9e0d448649747dab81c4f1ca2714a8c4550eff49574cab262c9

Total reclaimed space: 308.3MB

 

Вы можете быть немного умнее с командой prune и удалять только старые неиспользуемые и висящие изображения. Так что если вы хотите удалить те, которые старше 24 часов, используйте это так:

docker image prune -a --filter "until=24h"

 

Удалите все образы докеров из вашей системы

Возможно, вы находитесь в среде тестирования и хотите начать заново, удалив все образы Docker.

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

docker ps -a -q | xargs docker rm

 

Теперь вы можете удалить все изображения следующим образом:

docker images -a -q | xargs docker rmi -f

 

Вот и все. Мы думаем, что достаточно справочного материала для удаления образов Docker, и вы должны лучше понять эту тему.

Если у вас есть какие-либо вопросы или предложения, пожалуйста, оставьте комментарий ниже.

Exit mobile version