Как удалить Docker-контейнеры, образы, тома и сети

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

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

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

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

Удаление всех неиспользуемых объектов Docker

Команда docker system prune удаляет все остановленные контейнеры, зависшие образы и неиспользуемые сети:

 docker system prune

Вам будет предложено подтвердить операцию:

 WARNING! This will remove: - all stopped containers - all networks not used by at least one container - all dangling images - all build cache Are you sure you want to continue? [y/N]

Используйте опцию -f ( --force ), чтобы обойти запрос.

Если вы хотите удалить все неиспользуемые изображения, а не только висячие, добавьте к команде опцию -a ( --all ):

 docker system prune -a
 WARNING! This will remove: - all stopped containers - all networks not used by at least one container - all images without at least one container associated to them - all build cache Are you sure you want to continue? [y/N]

По умолчанию команда не удаляет неиспользуемые тома, чтобы предотвратить потерю важных данных. Чтобы удалить все неиспользуемые тома, укажите параметр --volumes :

 docker system prune --volumes
 WARNING! This will remove: - all stopped containers - all networks not used by at least one container - all volumes not used by at least one container - all dangling images - all build cache Are you sure you want to continue? [y/N] y

Удаление Docker-контейнеров

Контейнеры Docker не удаляются автоматически при их остановке, если только вы не запустите контейнер с использованием флага --rm .

Удаление одного или нескольких контейнеров

Чтобы удалить один или несколько контейнеров Docker, используйте команду docker container rm , указав после нее идентификаторы контейнеров, которые вы хотите удалить.

Список всех контейнеров можно получить, вызвав команду docker container ls с опцией -a :

 docker container ls -a

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

 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES cc3f2ff51cab centos "/bin/bash" 2 months ago Created competent_nightingale cd20b396a061 solita/ubuntu-systemd "/bin/bash -c 'exec …" 2 months ago Exited (137) 2 months ago systemd fb62432cf3c1 ubuntu "/bin/bash" 3 months ago Exited (130) 3 months ago jolly_mirzakhani

Узнав CONTAINER ID контейнера, который вы хотите удалить, передайте его команде docker container rm . Например, чтобы удалить первые два контейнера, перечисленные в выводе выше, выполните:

 docker container rm cc3f2ff51cab cd20b396a061

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

 Error response from daemon: You cannot remove a running container fc983ebf4771d42a8bd0029df061cb74dc12cb174530b2036987575b83442b47. Stop the container before attempting removal or force remove.

Удаление всех остановленных контейнеров

Чтобы удалить все остановленные контейнеры, вызовите команду docker container prune :

 docker container prune
 WARNING! This will remove all stopped containers. Are you sure you want to continue? [y/N] y

Если вы хотите получить список всех неработающих (остановленных) контейнеров, которые будут удалены с помощью docker container prune , используйте следующую команду:

 docker container ls -a --filter status=exited --filter status=created

Удаление контейнеров с помощью фильтров

Команда docker container prune позволяет удалять контейнеры на основе определенного условия с помощью параметра --filter .

На момент написания этой статьи поддерживаются фильтры until и label . Вы можете указать несколько фильтров, используя несколько опций --filter .

Например, чтобы удалить все изображения, созданные более 12 часов назад, выполните:

 docker container prune --filter "until=12h"

Остановите и удалите все контейнеры

Чтобы остановить все запущенные контейнеры, введите команду docker container stop а затем укажите идентификаторы контейнеров:

 docker container stop $(docker container ls -aq)

Команда docker container ls -aq генерирует список всех контейнеров.

После остановки всех контейнеров удалите их с помощью команды docker container rm , указав затем список идентификаторов контейнеров.

 docker container rm $(docker container ls -aq)

Удаление образов Docker

После загрузки образа Docker он сохраняется на сервере до тех пор, пока вы не удалите его вручную.

Удаление одного или нескольких изображений

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

 docker image ls

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

 REPOSITORY TAG IMAGE ID CREATED SIZE centos latest 75835a67d134 7 days ago 200MB ubuntu latest 2a4cca5ac898 2 months ago 111MB linuxize/fedora latest a45d6dca3361 3 months ago 311MB java 8-jre e44d62cf8862 3 months ago 311MB

Найдя образы, которые нужно удалить, передайте их IMAGE ID команде docker image rm . Например, чтобы удалить первые два образа, перечисленные в выводе выше, выполните:

 docker image rm 75835a67d134 2a4cca5ac898

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

 Error response from daemon: conflict: unable to remove repository reference "centos" ( must force ) - container cd20b396a061 is using its referenced image 75835a67d134 

Удаление висящих изображений

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

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

 docker image prune
 WARNING! This will remove all dangling images. Are you sure you want to continue? [y/N] y

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

Удаление всех неиспользуемых изображений

Чтобы удалить все изображения, на которые не ссылается ни один существующий контейнер, а не только висячие, используйте команду prune с опцией -a :

 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

Удаление изображений с помощью фильтров

С помощью команды docker image prune вы также можете удалять образы на основе определенного условия с помощью параметра --filter .

На момент написания этой статьи поддерживаются фильтры until и label . Вы можете использовать несколько фильтров.

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

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

Удаление томов Docker

Удаление одного или нескольких томов

Чтобы удалить один или несколько томов Docker, выполните команду docker volume ls чтобы узнать идентификатор томов, которые вы хотите удалить.

 docker volume ls

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

 DRIVER VOLUME NAME local 4e12af8913af888ba67243dec78419bf18adddc3c7a4b2345754b6db64293163 local terano

Найдя ИМЯ VOLUME NAME для удаляемых томов, передайте его команде docker volume rm . Например, чтобы удалить первый том, указанный в выводе выше, выполните:

 docker volume rm 4e12af8913af888ba67243dec78419bf18adddc3c7a4b2345754b6db64293163

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

 Error response from daemon: remove 4e12af8913af888ba67243dec78419bf18adddc3c7a4b2345754b6db64293163: volume is in use - [ c7188935a38a6c3f9f11297f8c98ce9996ef5ddad6e6187be62bad3001a66c8e ] 

Удаление всех неиспользуемых томов

Чтобы удалить все неиспользуемые тома, выполните команду docker image prune :

 docker volume prune
 WARNING! This will remove all local volumes not used by at least one container. Are you sure you want to continue? [y/N]

Используйте опцию -f или --force , чтобы обойти запрос.

Удаление сетей Docker

Удаление одной или нескольких сетей

Чтобы удалить одну или несколько сетей Docker, используйте команду docker network ls чтобы найти идентификатор сетей, которые вы хотите удалить.

 docker network ls

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

 NETWORK ID NAME DRIVER SCOPE 107b8ac977e3 bridge bridge local ab998267377d host host local c520032c3d31 my-bridge-network bridge local 9bc81b63f740 none null local

Найдя сети, которые нужно удалить, передайте их NETWORK ID команде docker network rm . Например, чтобы удалить сеть с именем my-bridge-network , выполните:

 docker network rm c520032c3d31

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

 Error response from daemon: network my-bridge-network id 6f5293268bb91ad2498b38b0bca970083af87237784017be24ea208d2233c5aa has active endpoints 

Удаление всех неиспользуемых сетевых

Используйте команду docker network prune для удаления всех неиспользуемых сетей.

 docker network prune

Вам будет предложено продолжить:

 WARNING! This will remove all networks not used by at least one container. Are you sure you want to continue? [y/N]

Удаление сетей с помощью фильтров

С помощью команды docker network prune можно удалять сети в зависимости от состояния, используя опцию --filter .

На момент написания этой статьи поддерживаются фильтры until и label . Вы можете использовать несколько фильтров, используя несколько опций --filter .

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

 docker network prune -a --filter "until=12h"

Заключение

Мы показали вам некоторые распространенные команды для удаления Docker-контейнеров, образов, томов и сетей.

Вам также следует ознакомиться с официальной документацией Docker .

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

докер

Связанные руководства

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *