Удалить образ docker: Docker: Удалить Образ — Удалить Все Образы — Удалить Неиспользуемые
Полное руководство по удалению образов Docker
Если вы продолжите создавать образы докеров, у вас скоро начнется заканчиваться свободное место. Удаление старых и неиспользуемых образов 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
Чтобы принудительно удалить образ 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
- Опция -a отображает все запущенные и остановленные контейнеры.
- Опция -q отображает только идентификатор контейнера.
И тогда вам нужно остановить их всех. Вы можете использовать идентификаторы контейнеров один за другим, но это займет слишком много времени. Вы можете использовать магию 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, и вы должны лучше понять эту тему.
Если у вас есть какие-либо вопросы или предложения, пожалуйста, оставьте комментарий ниже.
Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.
Как удалить все контейнеры Docker, образы, тома и сети
Docker позволяет быстро создавать, тестировать и развертывать приложения как портативные самостоятельные контейнеры, которые могут работать практически в любой системе.
Docker не удаляет неиспользуемые объекты, такие как контейнеры, образы, тома и сети, если вы явно не скажете ему об этом. При работе с Docker можно легко накопить большое количество мусорных объектов, которые занимают много места на диске и размешивают данные, создаваемые командами Docker.
Это руководство служит «шпаргалкой», чтобы помочь пользователям Docker сохранить свою систему организованной и освободить место на диске, удалив все неиспользуемые контейнеры Docker, образы, тома и сети.
Удаляем все неиспользуемые объекты
Команда docker system prune удалит остановленные контейнеры, все висячие образы и все неиспользуемые сети:
docker system prune
Вы можете использовать флаг -f или —force, чтобы пропустить дополнительный запрос на подтверждение операции.
Вывод: 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]
Удаление контейнеров Docker
Контейнеры Docker не удаляются автоматически при их остановке, если вы специально не указали флаг —rm при его запуске.
Удаляем один или несколько контейнеров
Чтобы удалить один или несколько образов Docker используйте команду docker container rm, после которой следует указать идентификатор контейнера, который необходимо удалить. Список всех активных и неактивных контейнеров можно получить, передав флаг -a команде docker container ls:
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
Как только вы нашли необходимый идентификатор контейнера, который хотите удалить, передайте его имя команде 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 ls -a --filter status=exited --filter status=created
Чтобы удалить все остановленные контейнеры, используйте команду docker container prune:
docker container prune
Вам будет предложено продолжить, используйте флаг-for —force, чтобы пропустить этот вопрос.
Вывод: WARNING! This will remove all stopped containers. Are you sure you want to continue? [y/N] y
Удаляем контейнер используя фильтр
Команда docker container prune позволяет удалить контейнеры в зависимости от их состояния, используя флаг фильтрации —filter. На момент написания этой статьи дополнительно поддерживаются фильтры until и label. Вы можете использовать более одного фильтра, передавая несколько флагов —filter.
Например, чтобы удалить все образы, созданные более 12 часов назад, запустите:
docker container prune --filter "until=12h"
Остановить и удалить все контейнеры
Вы можете получить список всех контейнеров Docker в вашей системе с помощью команды docker container ls -aq. Чтобы остановить все запущенные контейнеры, используйте команду docker container stop, после которой укажите список всех идентификаторов.
docker container stop $(docker container ls -aq)
После остановки всех контейнеров их можно удалить. Используя команду docker container stop, за которой следует список идентификаторов контейнеров попробуем сделать это:
docker container rm $(docker container ls -aq)
Как удалить образы Docker
Для удаления одного или нескольких образов Docker используйте команду docker images ls, чтобы найти идентификатор(ID) образа, который нужно удалить.
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
Как только вы найдете образы, которые хотите удалить, передайте их идентификаторы команде 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
Вам будет предложено продолжить, используйте флаг -f или —force, чтобы пропустить этот вопрос.
Чтобы удалить все образы, на которые не ссылается ни один существующий контейнер, используйте флаг -a:
docker image prune -a
Удаляем образы используя фильтры
С помощью команды docker image prune можно удалить образы используя определенные условия с помощью флага фильтрации —filter.
На момент написания этой статьи в настоящее время поддерживаются фильтры until и label. Вы можете использовать более одного фильтра, передавая несколько флагов —filter.
Например, чтобы удалить все изображения, созданные более 6 минут назад, запустите:
docker image prune -a --filter "until=6m"
Удаление Docker томов
Удалить один или несколько томов
Для начала, используйте команду docker volume ls для поиска идентификатора томов. Это необходимо чтобы удалить один или несколько томов Docker.
docker volume ls
Результат выполнения команды должен выглядеть примерно так:
DRIVER VOLUME NAME local 4e12af8913af888ba67243dec78419bf18adddc3c7a4b2345754b6db64293163 local terano
Теперь выберите имя или несколько имен томов, которые вы хотите удалить и передайте их в команду docker volume rm. Например, чтобы удалить первый том, указанный в выводе выше выполните:
docker volume rm 4e12af8913af888ba67243dec78419bf18adddc3c7a4b2345754b6db64293163
Если вы получаете ошибку, подобную следующей, это означает, что выбранный том используется существующим контейнером. Чтобы удалить том, придется сначала удалить контейнер.
Error response from daemon: remove 4e12af8913af888ba67243dec78419bf18adddc3c7a4b2345754b6db64293163: volume is in use — [c7188935a38a6c3f9f11297f8c98ce9996ef5ddad6e6187be62bad3001a66c8e]
Удалить неиспользуемые тома
Для удаления всех неиспользуемых томов существует команда docker volume prune:
docker volume prune
Удаление сети Docker
Одна или несколько сетей
Перед удалением одной или нескольких сетей Docker используйте команду docker network ls, чтобы найти идентификатор сетей, которые хотите удалить.
docker network ls
Результат должен быть примерно таким:
NETWORK ID NAME DRIVER SCOPE 107b8ac977e3 bridge bridge local ab998267377d host host local c520032c3d31 my-abuzov-network bridge local 9bc81b63f740 none null local
После обнаружения названия сетей, передайте их идентификатор сети команде docker network rm. Например, чтобы удалить сеть с именем my-abuzov-network выполните:
docker network rm c520032c3d31
Если вы получаете ошибку, подобную следующей, это означает, что сеть используется существующим контейнером. Чтобы удалить сеть, вам придется сначала удалить контейнер.
Error response from daemon: network my-abuzov-network id 6f5293268bb91ad2498b38b0bca970083af87237784017be24ea208d2233c5aa has active endpoints
Удалить неиспользуемую сеть
Используйте команду docker network prune для удаления всех неиспользуемых сетей.
docker network prune
Эту команду можно выполнить принудительно, используя специальный флаг -f или —force.
Удалить сети с помощью фильтров
С помощью команды docker network prune можно удалить сети по условиям, используя флаг фильтрации —filter.
На момент написания этой статьи в настоящее время поддерживаются фильтры until и label. Вы можете использовать более одного фильтра, передавая несколько флагов —filter.
Например, чтобы удалить все сети, созданные более 5 часов назад, запустите:
docker network prune -a --filter "until=5h"
В этом руководстве мы показали вам некоторые общие команды для удаления контейнеров Docker, образов, томов и сетей.
Рекомендуем дополнительно проверить официальную документацию Docker. Если у вас возникли вопросы, пожалуйста, оставьте комментарий ниже.
Руководство по образам Docker: удаление образов, остановка контейнеров и удаление разделов
Перевод статьи «Docker Image Guide: How to Remove and Delete Docker Images, Stop Containers and Remove all Volumes».
Docker очень широко применяется в
разработке программ. Это отличный
инструмент для развертывания приложения
в облаке (или в какой-нибудь еще
Docker-ready инфраструктуре). Он также
пригождается и в локальной разработке.
С его помощью вы можете быстро запускать
сложные приложения и разрабатывать их
изолированно, причем с очень хорошей
производительностью.
В этой статье я собрал список самых
важных команд для эффективного
использования Docker.
Вывод списка всех образов
Docker
docker images
У меня есть три образа:
- MySQL в версии 8.0.19 и MySQL в последней
версии (с тегом latest), - а также Cassandra в последней версии.
(Прим. ред: терминологию можно посмотреть во вступительной статье по Docker).
Чтобы получить больше информации об образе, можно воспользоваться следующей командой:
docker inspect mysql:latest
В выводе команды мы получаем список
сведений. Альтернативный вариант
получения информации — при помощи ID
образа:
docker inspect 3a5e53f63281
В выводе команды вы получите очень
много всего, поэтому лучше сразу
отфильтровать нужную информацию:
docker inspect --format='{{.RepoTags}} {{.Config.Image}}' 3a5e53f63281
Удаление образов Docker
Удалить отдельный образ можно при
помощи команды docker rm. Допустим, я хочу
удалить образ MySQL:
docker rm mysql:latest
В моем случае еще остается образ с
тегом mysql:8.0.19. Таким образом, для полного
удаления мне нужно также удалить тег
другой версии:
docker rm mysql:8.0.19
Если мы хотим удалить образ напрямую,
проще это сделать по id:
docker image rm 3a5e53f63281 -f
Опция -f обеспечивает принудительное
выполнение. Если ваш образ имеет больше
одного тега, без этой опции вы получите
ошибку.
Запуск образа Docker
Чтобы запустить образ, можно
воспользоваться следующей командой:
docker run cassandra
Если такого образа у вас нет, он будет
загружен. Остановить выполнение команды
можно, нажав CTRL+C. Также можно запускать
образ в фоне, для этого к команде нужно
добавить опцию -d:
docker run -d mysql
Если контейнер запущен в фоне, вы
получаете его ID.
По умолчанию контейнер запускается
изолированно. То есть, вы не сможете
никак коммуницировать с ним или сохранять
какие-то файлы в своей текущей директории.
Проброс портов контейнера
При помощи опции -p можно перенаправить
порты, например, на страницу, которая
открывается из вашего контейнера:
docker run -p 8080:80 nginx
Контейнер NGINX предоставляет веб-сервер
через порт 80. При помощи -p 8080:80 локальный
порт 8080 перенаправляется на 80-й порт
контейнера.
Как залогиниться в контейнере
Иногда возникает необходимость
залогиниться в контейнере. Это возможно
только в том случае, если в контейнере
установлена оболочка. В противном случае
вы получите ошибку.
Для начала, запустите отдельный
контейнер и дайте ему имя:
docker run -d --name my_container nginx
Команда вернет ID контейнера. Теперь
вы можете выполнить оболочку в контейнере
и приложить к ней свои входные и выходные
данные, используя опции -i и -t:
docker exec -it my_container bash
Вместо имени контейнера для всех
дальнейших операций можно также
использовать возвращенный ранее
идентификатор.
Иногда bash бывает недоступен. Поэтому
можно попробовать запустить базовую
оболочку:
docker exec -it my_container sh
Вывод списка запущенных
контейнеров
После запуска контейнера вы можете
найти его в списке всех запущенных
контейнеров, для этого воспользуйтесь
следующей командой:
docker ps
Если добавить опцию -а, в списке появятся
также контейнеры, завершившие исполнение:
docker ps -a
Расшаривание локальной
папки, чтобы контейнер мог иметь к ней
доступ
Иногда бывает полезным синхронизировать
файлы между контейнером и локальной
файловой системой. Это можно сделать,
воспользовавшись при запуске контейнера
опцией -v.
На Linux и macOS можно расшарить локальную
временную папку следующим образом:
docker run --name=my_container -d -v $(pwd)/tmp:/var/log/nginx -p 8080:80 nginx
На Windows можно запустить:
docker run --name=my_container -d -v %cd%/tmp:/var/log/nginx -p 8080:80 nginx
Остановка запущенных
контейнеров
Запущенный контейнер можно остановить
при помощи следующей команды:
docker stop my_container
Остановка контейнера останавливает
все процессы, но сохраняет изменения
внутри файловой системы.
Запуск остановленного
контейнера
Остановленный контейнер можно запустить
следующим образом:
docker start my_container
Удаление контейнера
Чтобы удалить остановленный контейнер,
выполните:
docker rm my_container
Чтобы остановить и удалить контейнер
одной командой, можно добавить опцию
-f.
docker rm -f my_container
Создание тома и расшаривание
его между несколькими контейнерами
Создаем независимый том (volume) с именем
SharedData:
docker volume create --name SharedData docker run --name=my_container -d -v SharedData:/var/log/nginx -p 8080:80 nginx docker run --name=my_container_2 -d -v SharedData:/var/log/nginx -p 8080:80 nginx
Теперь у обоих контейнеров будет общая
папка, файлы в которой будут
синхронизироваться с обоими контейнерами.
Удаление тома
Чтобы удалить том, нужно сначала
удалить все контейнеры, использующие
его.
docker rm -f my_container docker rm -f my_container_2 docker volume rm SharedData
Удаление остановленных контейнеров и неиспользуемых образов
Безопасная команда очистки:
docker system prune -a
Удаление всех томов, которые
не используются
Все отсоединенные тома можно удалить
при помощи следующей команды:
docker system prune
Заключение
Создание контейнеров, вход в них, проброс портов и расшаривание папок это самые важные задачи, осуществляемые при помощи интерфейса командной строки Docker. Выполняемые при этом команды составляют основу таких систем как Kubernetes и позволяют нам создавать и запускать приложения изолированно.
Как удалить неиспользуемые образы и контейнеры Docker? — Хабр Q&A
Осваиваю по чуть-чуть докер как замену Vagrant. Использую под Windows 10 x64.
Если ввести команду docker image ls -a
то я получу вот такой вот огромнейший список образов:
REPOSITORY TAG IMAGE ID CREATED SIZE
compressor latest e7bce9666889 10 days ago 749MB
<none> <none> 1f1f1aa4ae2f 10 days ago 749MB
<none> <none> 3bb11dab29e3 10 days ago 749MB
<none> <none> 9ba4f9c83e1d 10 days ago 739MB
<none> <none> c5e434998a55 10 days ago 733MB
<none> <none> 63ed6e76dd99 10 days ago 737MB
<none> <none> ee99372c449f 10 days ago 765MB
<none> <none> 383a61e13c20 10 days ago 737MB
<none> <none> e9190eaef8e6 10 days ago 733MB
<none> <none> 0cbc5aa5ef4d 10 days ago 749MB
<none> <none> 787250f91fef 10 days ago 749MB
<none> <none> 8a6e760211f9 10 days ago 749MB
<none> <none> 148153f129c5 10 days ago 739MB
<none> <none> 2de315c41c64 10 days ago 737MB
<none> <none> 1717e3c3bcc1 10 days ago 749MB
<none> <none> d56ede6c805e 10 days ago 749MB
<none> <none> 8cbc67298b2d 10 days ago 749MB
<none> <none> bff8e8f683c4 10 days ago 739MB
<none> <none> 623fb0ff2dcb 10 days ago 737MB
<none> <none> 6571e073391f 10 days ago 733MB
<none> <none> f5b87e8e05e1 10 days ago 758MB
<none> <none> 6ae3c4d8424d 10 days ago 758MB
<none> <none> dca137070f2a 10 days ago 749MB
<none> <none> 07674f826bc4 10 days ago 737MB
<none> <none> 300507774fcb 10 days ago 733MB
<none> <none> 4578d80529d1 10 days ago 737MB
<none> <none> 4fde50fc0a2e 10 days ago 733MB
<none> <none> d313e0599cff 10 days ago 273MB
<none> <none> 0839508746fb 10 days ago 269MB
<none> <none> af2b258db005 10 days ago 273MB
<none> <none> 82fc987fc158 10 days ago 269MB
<none> <none> 1442906cd12f 11 days ago 269MB
mariadb latest 7fcf8c1a96d2 4 weeks ago 397MB
<none> <none> 1a34fad76b34 4 weeks ago 733MB
d4w/nsenter latest 9e4f13a0901e 14 months ago 83.8kB
Также есть целая куча контейнеров:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
cf61b9666ef6 ee99372c449f "/bin/sh -c 'go-wr..." 10 days ago Exited (2) 10 days ago stoic_turing
b808be02b803 8a6e760211f9 "/bin/sh -c compre..." 10 days ago Exited (137) 10 days ago musing_yonath
0bc12515d24a d56ede6c805e "-name compressor" 10 days ago Created 0.0.0.0:8080->8080/tcp keen_kalam
b1e823f64cd6 d56ede6c805e "-name compressor" 10 days ago Created 0.0.0.0:8080->8080/tcp kind_leakey
f358c4ff64f8 d56ede6c805e "compressor" 10 days ago Exited (2) 10 days ago unruffled_yonath
9c608db2fd75 d56ede6c805e "compressor" 10 days ago Exited (2) 10 days ago heuristic_babbage
2868050bbff0 d56ede6c805e "compressor" 10 days ago Created stoic_haibt
eae11f3a306f d56ede6c805e "compressor" 10 days ago Exited (2) 10 days ago mystifying_snyder
6a5bac45ae30 f5b87e8e05e1 "bash" 10 days ago Exited (130) 10 days ago mystifying_sammet
7158ed3fb444 f5b87e8e05e1 "bash" 10 days ago Exited (0) 10 days ago wonderful_ritchie
8fc1484a144b f5b87e8e05e1 "bash" 10 days ago Exited (0) 10 days ago tender_goodall
1cfa3d889681 f5b87e8e05e1 "bash" 10 days ago Exited (0) 10 days ago peaceful_jang
41b51ef4dbd7 d313e0599cff "/bin/sh -c 'go ge..." 10 days ago Exited (1) 10 days ago elastic_brattain
8ce92252a980 1a34fad76b34 "bash" 10 days ago Exited (0) 10 days ago sad_heisenberg
c491683d1d18 1a34fad76b34 "bash" 10 days ago Exited (0) 10 days ago trusting_mestorf
ed4225d47dd5 1a34fad76b34 "bash" 10 days ago Exited (0) 10 days ago angry_boyd
9f813dcb7cfe c844795fa93c "/bin/sh -c 'go ge..." 10 days ago Exited (2) 10 days ago stupefied_brown
04b16547b6fc mariadb:latest "docker-entrypoint..." 3 weeks ago Exited (0) 16 hours ago db
Из всего этого, я использую только контейнер с именем db, собранный из образа mariadb:latest. Все остальное, мои пробы создать контейнер с Golang приложением.
Вопросы следующего характера:
1. Как удалить все ненужные образы?
2. Сумма размером всех образов — это занятое место на диске под образы? Или если образ A (размером 6мб) использует образ Б (размером 500 мб), то образ А в списке будет с размером 506 мб, но фактически займет только 6 мб?
3. Если я собрал контейнер из образа, могу ли я удалить образ с диска?
Руководство по образам Docker: удаление образов, остановка контейнеров и удаление разделов
Перевод статьи «Docker Image Guide: How to Remove and Delete Docker Images, Stop Containers and Remove all Volumes».
Docker очень широко применяется в
разработке программ. Это отличный
инструмент для развертывания приложения
в облаке (или в какой-нибудь еще
Docker-ready инфраструктуре). Он также
пригождается и в локальной разработке.
С его помощью вы можете быстро запускать
сложные приложения и разрабатывать их
изолированно, причем с очень хорошей
производительностью.
В этой статье я собрал список самых
важных команд для эффективного
использования Docker.
Вывод списка всех образов
Docker
docker images
У меня есть три образа:
- MySQL в версии 8.0.19 и MySQL в последней
версии (с тегом latest), - а также Cassandra в последней версии.
(Прим. ред: терминологию можно посмотреть во вступительной статье по Docker).
Чтобы получить больше информации об образе, можно воспользоваться следующей командой:
docker inspect mysql:latest
В выводе команды мы получаем список
сведений. Альтернативный вариант
получения информации — при помощи ID
образа:
docker inspect 3a5e53f63281
В выводе команды вы получите очень
много всего, поэтому лучше сразу
отфильтровать нужную информацию:
docker inspect --format='{{.RepoTags}} {{.Config.Image}}' 3a5e53f63281
Удаление образов Docker
Удалить отдельный образ можно при
помощи команды docker rm. Допустим, я хочу
удалить образ MySQL:
docker rm mysql:latest
В моем случае еще остается образ с
тегом mysql:8.0.19. Таким образом, для полного
удаления мне нужно также удалить тег
другой версии:
docker rm mysql:8.0.19
Если мы хотим удалить образ напрямую,
проще это сделать по id:
docker image rm 3a5e53f63281 -f
Опция -f обеспечивает принудительное
выполнение. Если ваш образ имеет больше
одного тега, без этой опции вы получите
ошибку.
Запуск образа Docker
Чтобы запустить образ, можно
воспользоваться следующей командой:
docker run cassandra
Если такого образа у вас нет, он будет
загружен. Остановить выполнение команды
можно, нажав CTRL+C. Также можно запускать
образ в фоне, для этого к команде нужно
добавить опцию -d:
docker run -d mysql
Если контейнер запущен в фоне, вы
получаете его ID.
По умолчанию контейнер запускается
изолированно. То есть, вы не сможете
никак коммуницировать с ним или сохранять
какие-то файлы в своей текущей директории.
Проброс портов контейнера
При помощи опции -p можно перенаправить
порты, например, на страницу, которая
открывается из вашего контейнера:
docker run -p 8080:80 nginx
Контейнер NGINX предоставляет веб-сервер
через порт 80. При помощи -p 8080:80 локальный
порт 8080 перенаправляется на 80-й порт
контейнера.
Как залогиниться в контейнере
Иногда возникает необходимость
залогиниться в контейнере. Это возможно
только в том случае, если в контейнере
установлена оболочка. В противном случае
вы получите ошибку.
Для начала, запустите отдельный
контейнер и дайте ему имя:
docker run -d --name my_container nginx
Команда вернет ID контейнера. Теперь
вы можете выполнить оболочку в контейнере
и приложить к ней свои входные и выходные
данные, используя опции -i и -t:
docker exec -it my_container bash
Вместо имени контейнера для всех
дальнейших операций можно также
использовать возвращенный ранее
идентификатор.
Иногда bash бывает недоступен. Поэтому
можно попробовать запустить базовую
оболочку:
docker exec -it my_container sh
Вывод списка запущенных
контейнеров
После запуска контейнера вы можете
найти его в списке всех запущенных
контейнеров, для этого воспользуйтесь
следующей командой:
docker ps
Если добавить опцию -а, в списке появятся
также контейнеры, завершившие исполнение:
docker ps -a
Расшаривание локальной
папки, чтобы контейнер мог иметь к ней
доступ
Иногда бывает полезным синхронизировать
файлы между контейнером и локальной
файловой системой. Это можно сделать,
воспользовавшись при запуске контейнера
опцией -v.
На Linux и macOS можно расшарить локальную
временную папку следующим образом:
docker run --name=my_container -d -v $(pwd)/tmp:/var/log/nginx -p 8080:80 nginx
На Windows можно запустить:
docker run --name=my_container -d -v %cd%/tmp:/var/log/nginx -p 8080:80 nginx
Остановка запущенных
контейнеров
Запущенный контейнер можно остановить
при помощи следующей команды:
docker stop my_container
Остановка контейнера останавливает
все процессы, но сохраняет изменения
внутри файловой системы.
Запуск остановленного
контейнера
Остановленный контейнер можно запустить
следующим образом:
docker start my_container
Удаление контейнера
Чтобы удалить остановленный контейнер,
выполните:
docker rm my_container
Чтобы остановить и удалить контейнер
одной командой, можно добавить опцию
-f.
docker rm -f my_container
Создание тома и расшаривание
его между несколькими контейнерами
Создаем независимый том (volume) с именем
SharedData:
docker volume create --name SharedData docker run --name=my_container -d -v SharedData:/var/log/nginx -p 8080:80 nginx docker run --name=my_container_2 -d -v SharedData:/var/log/nginx -p 8080:80 nginx
Теперь у обоих контейнеров будет общая
папка, файлы в которой будут
синхронизироваться с обоими контейнерами.
Удаление тома
Чтобы удалить том, нужно сначала
удалить все контейнеры, использующие
его.
docker rm -f my_container docker rm -f my_container_2 docker volume rm SharedData
Удаление остановленных контейнеров и неиспользуемых образов
Безопасная команда очистки:
docker system prune -a
Удаление всех томов, которые
не используются
Все отсоединенные тома можно удалить
при помощи следующей команды:
docker system prune
Заключение
Создание контейнеров, вход в них, проброс портов и расшаривание папок это самые важные задачи, осуществляемые при помощи интерфейса командной строки Docker. Выполняемые при этом команды составляют основу таких систем как Kubernetes и позволяют нам создавать и запускать приложения изолированно.
Запись Руководство по образам Docker: удаление образов, остановка контейнеров и удаление разделов впервые появилась Techrocks.
Как удалить все Docker образы и контейнеры @ 900913 — Цифровое наше всё
Не все Docker-образы одинаково полезны. Они занимают место на диске,
найти их на файловой системе не так то просто. К тому же, Docker имеет свои
команды для управления образами – так что лучше не лезть самому на файловую
систему, а довериться ему – вдруг у него сохранится кеш, или какая-то
иная мета-информация, которая будет только путать и его, и вас.
Если кратко, то ответом на поставленный вопрос может служить данный скрипт:
#!/bin/bash
# Stop all containers
docker stop $(docker ps -a -q)
# Delete all containers
docker rm $(docker ps -a -q)
# Delete all images
docker rmi $(docker images -q)
Но давайте не будем на этом останавливаться и рассмотрим подробнее, что здесь
происходит!
Получить список имён всех имеющихся Docker-контейнеров
Для начала, команда docker ps
, которая используется в каждой инструкции –
выводит список всех контейнеров. Однако, эта команда по умолчанию выводит
только запущенные контейнеры. Чтобы вывести все, используем ключ -a
.
Сам же список выводится довольно подробно, в виде таблицы, которую удобно
смотреть человеку. Но нам то нужно не удобство, а просто список имён контейнеров.
Как раз для этого мы используем ключ -q
– от «quiet» (тихо).
Таким образом, чтобы получить просто список имён всех имеющихся в системе
Docker-контейнеров, используется команда:
docker ps -a -q
Непосредственно удаление контейнеров и образов
Сначала нужно остановить запущенные контейнеры – Docker не позволяет удалить
контейнер, пока он запущен:
docker stop $(docker ps -a -q)
– и пусть вас не смущает, что мы просим остановить уже остановленные контейнеры:
вот к этому Docker безразличен. Ты попросил меня остановить то, что и так
остановлено? Замечательно! – Значит ничего не надо делать!
Теперь мы можем удалить все контейнеры командой docker rm
:
docker rm $(docker ps -a -q)
И всё для того, чтобы иметь возможность удалить непосредственно образ.
Как вы могли догадаться, удалить образ без удаления всех контейнеров, которые
его используют, нельзя.
docker rmi $(docker images -q)
Вот такой вот аналог смерти кащеевой! А что вы хотели? – Контейнеры…
Политика автоматического удаления Docker-образов | Yandex.Cloud
Политика удаления Docker-образов позволяет задать правила, в соответствии с которыми Docker-образы будут удаляться автоматически.
Задать политику удаления можно только для каждого отдельного репозитория. Политика применяется только к Docker-образам, имя которых в точности совпадает с именем репозитория. Совпадение по префиксу (вложенные репозитории) не поддерживается. Нельзя задать политику для группы репозиториев, реестра, каталога или облака.
Статусы политики удаления
Примечание
Политика по умолчанию создается в статусе DISABLED
.
Политика удаления может находится в следующих статусах:
ACTIVE
— политика активна и регулярно удаляет Docker-образы по установленным правилам.DISABLED
— политика выключена и не удаляет Docker-образы в репозитории. Политики в этом статусе можно использовать для подготовки и тестирования правил.
У репозитория может быть только одна активная политика и несколько выключенных. Активную политику можно выключить в любой момент.
Как для активной, так и для выключенной политики можно делать тестовые (dry-run) запуски, чтобы проверить, какие Docker-образы будут удалены в соответствии с правилами.
Правила политики удаления
Для удаления Docker-образы сначала фильтруются по тегам, а затем проверяются на соответствие условиям.
Важно
Необходимо указать хотя бы один фильтр по тегу и задать хотя бы одно условие удаления.
Чтобы сконфигурировать политику удаления, задайте следующие параметры:
- Фильтрация Docker-образа по тегам:
tag_regexp
— флаг для указания фильтра в виде регулярного выражения.Использование регулярного выражения
.*
дляtag_regexp
означаетвсе образы с тегами
. Для того, чтобы правило распространялось на образы без тегов, надо явно выставлять флагuntagged
.untagged
— флаг для применения правила к Docker-образам без тегов.
- Условия для удаления Docker-образов:
expire_period
— период времени, который должен пройти с момента создания Docker-образа, чтобы он подходил для автоматического удаления. Период должен быть кратен 24 часам.retained_top
— количество Docker-образов (подпадающих под заданный фильтр по тегам), которое необходимо оставить, даже еслиexpire_period
уже истек.
Разрешение конфликтов правил
- Если Docker-образ, отфильтрованный по тегу, подпадает только под одно правило для удаления, то он удаляется в соответствии с настройками этого правила.
- Если Docker-образ, отфильтрованный по тегу, подпадает под несколько конфликтующих правил, он будет удален, только если этого требуют все правила. Если есть хотя бы одно правило, согласно которому Docker-образ не должен быть удален — он останется.
Docker удалить образы тегов
Переполнение стека
- Около
Продукты
- Для команд
Переполнение стека
Общественные вопросы и ответыПереполнение стека для команд
Где разработчики и технологи делятся частными знаниями с коллегамиВакансии
Программирование и связанные с ним технические возможности карьерного ростаТалант
Нанимайте технических специалистов и создавайте свой бренд работодателяРеклама
Обратитесь к разработчикам и технологам со всего мира- О компании
Загрузка…
.
Как удалить образы, контейнеры, сети и тома Docker {2020}
Контейнеры Docker предназначены для обеспечения самодостаточной среды со всеми библиотеками и конфигурациями, необходимыми для работы программного обеспечения. Во время разработки они могут расти в неорганизованном виде со старыми, устаревшими и неиспользуемыми компонентами.
В этом руководстве вы узнаете, как организовать среду Docker путем удаления образов Docker, контейнеров, томов и сетей.
Использование этих команд делает управление контейнерами Docker быстрым и простым.
- Система Linux под управлением Docker
- Доступ к терминалу / командной строке ( Ctrl + Alt + T в Ubuntu, Alt + F2 в CentOS)
- Учетная запись пользователя с sudo привилегиями
Примечание: Если ваша система отвечает « доступ запрещен » после попытки удаления, добавьте префикс sudo в начале команды.
Как удалить контейнеры Docker
Контейнер создает определенную среду, в которой может выполняться процесс.Многие контейнеры создаются, тестируются и забрасываются в течение жизненного цикла разработки.
Поэтому важно знать, как найти ненужные емкости и удалить их.
1. Сначала перечислите все контейнеры Docker с помощью команды:
док-контейнер ls -a
На выходе отображается список всех запущенных контейнеров, их идентификаторы, имена, изображения, статус и другие параметры.
Вы также можете сгенерировать список всех контейнеров только по их числовому идентификатору, выполните команду:
док-контейнер ls –aq
2.Чтобы остановить конкретный контейнер , введите следующее:
остановка док-контейнера [container_id]
Замените [container_id]
числовым идентификатором контейнера из вашего списка.
В одной команде можно ввести несколько идентификаторов контейнеров.
Чтобы остановить все контейнеры , введите:
docker container stop $ (докер-контейнер ls –aq)
Это заставляет Docker использовать список всех идентификаторов контейнеров в качестве цели команды stop
.
Примечание: Если вы вошли в систему как пользователь sudo , обязательно добавьте префикс sudo
перед обеими командами docker
при остановке всех контейнеров ( sudo docker container stop $ (sudo док-контейнер ls –aq
))
Удалить остановленный контейнер
Чтобы удалить остановленный контейнер , используйте команду:
док-контейнер rm [container_id]
Как и раньше, удаляется контейнер с указанным вами идентификатором.
Удалить все остановленные контейнеры
По удалить все остановленные контейнеры :
док-контейнер rm $ (док-контейнер ls –aq)
Удалить все контейнеры Docker
Чтобы очистить Docker и начать с нуля, введите команду:
docker container stop $ (docker container ls –aq) && docker system prune –af ––volumes
Это указывает Docker на остановку контейнеров, перечисленных в круглых скобках.
Внутри круглых скобок вы указываете Docker создать список всех контейнеров с их числовыми идентификаторами. Затем информация передается обратно в команду container stop
и останавливает все контейнеры.
Атрибут &&
указывает Docker на удаление всех остановленных контейнеров и томов.
–af
указывает, что это должно применяться ко всем контейнерам ( и
) без необходимого подтверждения ( f
).
Удаление контейнера с помощью фильтров
Вы также можете указать удаление всех объектов, не соответствующих указанной метке.
Для этого используйте команду:
docker container prune ––filter = ”label! = Maintainer = Jeremy”
Эта команда сообщает Docker удалить все контейнеры , которые не помечены сопровождающим как « Джереми ». Команда ! =
представляет собой логическую запись, означающую « не равно .”
Разбивка метки
команд:
-
label = <ключ>
-
label = <ключ> = <значение>
-
этикетка! = <Ключ>
-
метка! = <Ключ> = <значение>
Использование этих терминов в сочетании с ярлыками дает вам полный контроль над удалением ресурсов в Docker.
Как удалить образы Docker
Образы Docker — это файлы, которые включают несколько уровней, используемых для запуска кода в контейнере.
В процессе разработки изображения могут проходить множество итераций. Старые и устаревшие изображения могут загромождать вашу систему, занимать место для хранения и затруднять поиск.
1. Чтобы удалить образ Docker , начните с перечисления всех образов в вашей системе:
образ докера ls
В выходных данных отображаются локально доступные образы Docker, как показано ниже.
2. Запишите IMAGE ID — это идентификатор, используемый для удаления изображения.
3. Затем удалите ненужные изображения:
образ докера rm [image_id1] [image_id2]
Замените [image_id1]
и [image_id2]
идентификатором изображения, полученным с помощью первой команды. Вы можете ввести один идентификатор изображения или несколько идентификаторов для удаления.
Система может ответить на ваш запрос сообщением об ошибке, что существует конфликт, и она не может удалить ссылку на репозиторий. Это указывает на то, что контейнер использует изображение.Перед удалением изображения необходимо сначала удалить контейнер.
.
Удалите все образы и контейнеры — TechOverflow
Этот пост также доступен на: Deutsch (немецкий)
Проблема:
Вы используете Docker, но при работе с ним было создано множество образов и контейнеров. Вы хотите удалить их все, чтобы сэкономить место на диске.
Решение:
Предупреждение : Этот уничтожит все ваших изображений и контейнеров. Восстановить их нет возможности!
Выполните эти команды в оболочке:
docker rm $ (docker ps -a -q) docker rmi $ (docker images -q)
Это решение было предложено пользователем GitHub @crosbymichael в этом выпуске
Если вы хотите удалить даже те изображения, на которые есть ссылки в репозиториях, используйте
docker rmi $ (docker images -q) --force
Справочная информация:
Вы можете увидеть контейнеры на своем компьютере, используя
docker container ls
Пример вывода:
КОНТЕЙНЕР ИДЕНТИФИКАЦИЯ КОМАНДА ИЗОБРАЖЕНИЯ СОЗДАЕТСЯ СТАТУС ИМЕНА ПОРТОВ 3477a4dcdce2 докер.elastic.co/elasticsearch/elasticsearch-oss:6.7.1 "/ usr / local / bin / dock…" 2 дня назад Up 2 дня 0.0.0.0:9200->9200/tcp, 9300 / tcp elasticsearch2 67997f002f15 appbaseio / dejavu "http-server '-p 135…" 2 дня назад Вверх 2 дня 0.0.0.0:1358->1358/tcp dejavu
Как мы видим, сейчас на этом компьютере работают два контейнера.
Для каждого контейнера столбец IMAGE
показывает нам, какое изображение выполняется в контейнере.Например, второй контейнер работает на образе appbaseio / dejavu
.
Когда мы говорим докеру показать нам все изображения, которые в данный момент находятся на компьютере:
$ docker image ls -a РЕПОЗИТОРНЫЙ ТЕГ ИДЕНТИФИКАТОР ИЗОБРАЖЕНИЯ СОЗДАННЫЙ РАЗМЕР <нет> <нет> 39ac507bd271 11 дней назад 962 МБ <нет> <нет> 6a2c829a5d4f 11 дней назад 962 МБ докер.elastic.co/elasticsearch/elasticsearch-oss 6.7.1 c91b419ac445 3 недели назад 682MB pypy 3 75e018538e96 4 недели назад 962MB node 10 64c810caf95a 4 недели назад 899MB appbaseio / dejavu последнее 47b8375dc541 2 месяца назад 141MB восходящий столб / альпийский 3.4-v4.4.4-3.6.1 2d384efd00ab 2 года назад 247MB
Сразу видно, что образов гораздо больше, чем контейнеров.
Для этого есть четыре основные причины:
- Docker сохраняет старые версии контейнеров, они не удаляются автоматически. В этом примере есть две версии
docker.elastic.co/elasticsearch/elasticsearch-oss
: версия6.7.1
и версия7.0.0
, хотя в настоящее время я использую только версию6.7.1
. Согласно списку, версия7.0.0
занимает дополнительные 682 мегабайта на моем SSD, но обратите внимание, что это число может быть неточным (см. многоуровневых изображений ниже) - Docker не удаляет автоматически образы, которые вы не более длительное использование (например, если вы использовали образ только для быстрой проверки, но больше не используете его)
- Docker использует многоуровневых образов . Это означает, что такой образ, как
appbaseio / dejavu
, не является автономным, а (обычно) основан на некотором базовом образе, таком какubuntu
илиdebian
.В большинстве случаев изображение состоит из нескольких слоев (обычно около 5-10) из-за способа их построения. Хотя это приводит к использованию меньшего дискового пространства, поскольку некоторые изображения используются несколькими «дочерними» образами, это по-прежнему приводит к тому, что на вашем диске остается много изображений, часто включая неиспользуемые промежуточные образы. - В случае, если вы сами создаете образы докеров, особенно если вы создаете свой собственный файл Docker, во время разработки часто создается много образов (представляющих промежуточные версии разрабатываемого вами программного обеспечения)
Для удаления образа, который вам больше не нужно, используйте команду docker image rm
.Скопируйте идентификатор изображения из столбца IMAGE ID
вывода docker image ls
, как показано выше.
Например, чтобы удалить образ elasticsearch версии 7.0.0
, используйте
$ docker image rm 0e92b9e5fe1e Без тегов: docker.elastic.co/elasticsearch/elasticsearch-oss:7.0.0 Без тегов: docker.elastic.co/elasticsearch/elasticsearch-oss@sha256:e9ab1f4c2ffbc7054dab91e8dc7fd9a56d53cce734098910d876eb14849b1ba3 Удалено: sha256: 0e92b9e5fe1e0949f5174ed86d9cbc3c2a041df493453f82b6c044ff78c7d17b Удалено: sha256: c2a552806b86aba72a6e6ea5efaaa295286e8b0cf42a14d799428e58f20e7090 Удалено: sha256: 71e7a706f7c03f0c7add24844f7b311edf83838ef383a877bcb94684b011893d Удалено: sha256: d43e5d351c26273e43b11f6937cb9a3192d856b4e083acfbc14b8500056221f2 Удалено: sha256: f3a2ae77ca96f2f55300b00beedbf14ade0a27bf29c395dcbf84b5bf02ef80ad Удалено: sha256: 5d7f2d83e59c0684b4a94ab5f6479d798444bdca8fe6c813f7ef6188cdd12ce5 Удалено: sha256: cc16decd0c6f218c3a21749e747d43deced9e8929e8db0b6050dd4102301651a
Как видно из выходных данных, при этом будет удалено не только само изображение ElasticSearch 0e92b9e5fe1e
, но и все другие изображения, от которых зависит изображение (которые также не используются никакими другими изображениями).
.