Удаление образов, томов и контейнеров Docker за считанные секунды
Опубликовано: 2023-03-03Docker — это технология контейнеризации программного обеспечения, которая помогает разработчикам создавать и развертывать приложения на разных платформах, от настольных компьютеров до облака.
Снимок — или план — исходного кода, зависимостей и инструментов, необходимых для создания приложения в контейнере Docker, называется образом. Приложения Docker, которым требуются постоянные данные, могут полагаться на хранилище, называемое томами, которое не зависит от базовой операционной системы.
Эффективная организация образов, томов и контейнеров важна при использовании Docker. Неиспользуемые воплощения этих активов могут накапливаться, занимая ценное дисковое пространство и в конечном итоге влияя на производительность системы.
В этой статье рассматриваются различные способы поддержания организации системы путем очистки образов (как по отдельности, так и всех сразу), томов и контейнеров. И мы будем использовать интерфейс командной строки docker
(CLI), чтобы быстро выполнить эти задачи.
Как удалить образы Docker
Удаление устаревших или ненужных образов из Docker необходимо для поддержания чистой и организованной системы. Давайте посмотрим, как CLI может нацелить определенные изображения на удаление.
Во-первых, давайте посмотрим на образы в среде Docker с помощью команды docker image ls
:
$ docker image ls REPOSITORY TAG IMAGE ID CREATED SIZE my_image latest 2cbc27836df4 60 seconds ago 7.05MB <none> <none> 85b412789704 2 days ago 7.05MB demo latest 26d80cd96d69 15 months ago 28.5MB
Приведенный выше список изображений показал изображения с именами my_image и demo , оба отмечены тегом last . Третье изображение не имеет имени или тега. В данном случае это «висячий» образ: тот, который в настоящее время не используется контейнером. Этот висящий образ появился в результате перестроения my_image (распространенный сценарий). Предыдущая версия образа все еще находится в файловой системе, но сейчас не используется.
В списке также отображаются первые 12 символов 64-значного идентификатора каждого изображения, даты создания и объем памяти, занимаемый изображениями.
Удалить все неиспользуемые изображения
В приведенном выше примере листинга у нас есть оборванное изображение. Однако изображение без имени или тега может быть активным. Например, его можно было использовать для запуска контейнера, ссылаясь на его идентификатор.
Чтобы безопасно удалить все изображения, которые действительно висят, вы можете использовать команду docker image prune
:
$ docker image prune WARNING! This will remove all dangling images. Are you sure you want to continue? [y/N] y Deleted Images: deleted: sha256:85b412789704c17e9c5e7edc97b2f64c748bbdae7eaa44d3fe2cc21a87acad3d Total reclaimed space: 7.05MB
Мы снова перечислим наши изображения, чтобы увидеть результаты нашей работы:
$ docker image ls REPOSITORY TAG IMAGE ID CREATED SIZE my_image latest 2cbc27836df4 70 seconds ago 7.05MB demo latest 26d80cd96d69 15 months ago 28.5MB
После процесса обрезки изображение без имени или тега исчезло.
Удалить конкретное изображение по имени
Вы можете выбрать изображение для удаления, указав его имя:
$ docker image rm <image_name>
Примечание. Вы не можете легко удалить все еще используемые изображения. Вы должны остановить или удалить запущенные контейнеры, использующие образы. Хотя это обычно не рекомендуется, вы можете принудительно удалить активный образ, используя флаг -f
:
$ docker image rm <image_name> -f
Использование сокращения rmi для удаления изображений
В интерфейсе командной строки Docker есть сокращенный подход к удалению образов с псевдонимом rmi
. Использование его для удаления изображения по имени выглядит так:
$ docker rmi demo Untagged: demo:latest Deleted: sha256:2cbc27836df4a7707e746e28368f1fdecfefbfb813aae06611ca6913116b80b4
Мы будем использовать rmi
для следующих примеров удаления изображений.
Удалить все изображения без тегов
Образы без тегов по-прежнему занимают ценное место на диске, что со временем все больше и больше замедляет работу вашей системы.
Чтобы удалить все образы без тегов в Docker, используйте команду docker rmi
с фильтром. Вы можете предоставить фильтры на основе определенных критериев, используя параметр -f
(не путать с флагом -f
, доступным для image rm
для принудительного выполнения действия).
Фильтр dangling=true
используется для идентификации непомеченных изображений:
$ docker rmi $(docker images -f "dangling=true" -q)
Параметр -q
в приведенной выше команде отображает идентификаторы всех изображений без тегов. Все эти идентификаторы затем передаются в качестве аргументов в docker rmi
для их удаления.
Этот фильтр использует ключевое слово «висячие», но, как отмечалось выше, некоторые изображения без тегов могут быть активными. Вы будете предупреждены, если изображение, выбранное этим фильтром, на самом деле не висит.
Удалить конкретное изображение по идентификатору
Вы можете использовать команду docker rmi
для удаления любого конкретного образа, указав его идентификатор:
$ docker rmi <image_id>
Удалить конкретное изображение по имени и тегу
Вы можете удалить определенный образ вместе с его именем и тегом с помощью команды docker rmi
.
Например, если у вас есть несколько изображений с одинаковым именем, но разными тегами, вы можете удалить конкретное, используя этот формат:
$ docker rmi <image_name>:<tag>
Этот метод удобен, когда вы хотите удалить определенную версию изображения вместо удаления всех изображений, связанных с репозиторием.
Удалить все изображения с последним тегом
В Docker тег «последняя» относится к самой последней версии определенного образа Docker. Последний тег часто используется в качестве тега по умолчанию для образов Docker. Он автоматически назначается самой последней сборке образа, если явно не указан другой тег.
Docker предоставляет команду для удаления всех образов с «последним» тегом:
$ docker rmi $(docker images | grep "latest" | awk '{print $3}')
Приведенная выше команда разделена на 2 части. Сначала он получает список идентификаторов образов, а затем передает этот список в качестве аргумента команде docker rmi
.
Удаление изображений из удаленного репозитория
Чтобы удалить образ из удаленного репозитория, такого как Docker Hub, сначала необходимо войти в учетную запись с помощью интерфейса командной строки Docker.
После того, как вы вошли в систему, вам просто нужно использовать команду docker rmi
для удаления образа. Команда docker rmi
может удалять как локальные, так и удаленные образы:
docker rmi my_repo/my_image_tag
Примечательно, что вы можете удалять только те изображения, которые были отправлены в репозиторий. Точно так же вы не можете удалить изображения, используемые запущенными контейнерами.
Удалить несколько изображений из удаленного репозитория
Чтобы удалить несколько образов из удаленного репозитория, вы можете использовать команду docker rmi
, за которой следуют идентификаторы или теги изображений. Например:
docker rmi my_repo/image_tag_1 my_repo/image_tag_2 my_repo/image_tag_3
Это удалит три изображения с тегами image_tag_1
, image_tag_2
и image_tag_3
из репозитория my_repo
.
Как удалить тома Docker
Тома Docker могут занимать много места на диске, особенно если они содержат большие объемы данных или несколько резервных копий. Удаляя тома, которые больше не нужны, вы снижаете риск утечки данных и гарантируете, что конфиденциальные данные не будут доступны неавторизованным пользователям. Регулярное удаление томов также может поддерживать актуальность среды Docker и предотвращать проблемы, вызванные устаревшими данными.
Эти команды безвозвратно уничтожают все данные, хранящиеся в томе, поэтому используйте их с осторожностью.
Удалить все неиспользуемые тома
В Docker удаление неиспользуемых томов так же важно, как и удаление образов или контейнеров.
Чтобы освободить дисковое пространство, вы можете использовать команду docker volume prune
.
Удалить определенный том по имени
Удаление определенного тома в Docker полезно для удаления неиспользуемых томов. Вот команда для удаления тома:
docker volume rm my_volume_name
С помощью приведенной выше команды том my_volume_name будет удален. Docker выдает ошибку, если вы пытаетесь удалить используемый том. Вы можете проверить доступные тома с помощью команды docker volume ls
.
Как удалить контейнеры Docker
По мере того, как вы будете больше работать с Docker, у вас может накопиться много неиспользуемых контейнеров, которые занимают дисковые ресурсы. Если вы не удалите их, они могут со временем накапливаться и занимать ценные дисковые ресурсы, замедляя работу вашей системы и потенциально подвергая вас риску.
Удалить все остановленные контейнеры
Команда docker container prune
может удалить все остановленные контейнеры в Docker. Здесь команда создает список всех остановленных контейнеров, которые будут удалены, и запрашивает подтверждение перед продолжением. Это помогает освободить место на диске и поддерживать чистую и организованную среду Docker, позволяя перепроверить, не теряете ли вы ничего важного:
$ docker container prune WARNING! This will remove all stopped containers. Are you sure you want to continue? [y/N] y Deleted Containers: 4df4c47c4df4 d35bcec20bce
Обратите внимание, что с помощью этой команды можно удалить только остановленные контейнеры. Если вам нужно удалить запущенные контейнеры, вам нужно сначала остановить их или использовать другую команду.
Удалить конкретный контейнер по идентификатору
В Docker вы можете удалить конкретный контейнер по идентификатору, используя docker rm command
вместе с идентификатором контейнера. Во-первых, получите все идентификаторы контейнеров с помощью docker ps command
:
$ docker ps -a -q 1ce3cdeb4035 06b79541e25c fa98f1804e3e $ docker rm 1ce3cdeb4035
Приведенная выше команда работает, только если контейнер находится в остановленном состоянии. Если контейнер запущен, то его нужно принудительно удалить с помощью флага -f:
$ docker rm -f 1ce3cdeb4035
Удалить конкретный контейнер по имени
Docker предоставляет многоцелевую команду docker rm
для удаления обоих контейнеров по имени и идентификатору.
Например, если у вас есть контейнер с именем web_server , вы можете удалить его с помощью следующей команды:
$ docker rm web_server
Во-первых, важно остановить контейнер. Docker предоставляет команду docker stop
для остановки определенного контейнера.
Удалить все запущенные контейнеры
Чтобы удалить все запущенные контейнеры, вы можете использовать команду docker rm
:
$ docker rm $(docker ps -q)
Использование docker ps -q
перечисляет идентификаторы запущенных контейнеров. После этого идентификаторы передаются команде docker rm
, которая удаляет все контейнеры.
Обратите внимание, что эта команда удалит только запущенные контейнеры. Если вы хотите удалить все контейнеры, включая остановленные, вы можете использовать следующую команду:
$ docker rm $(docker ps -a -q)
Резюме
В этой статье объясняется, как удалить образы, тома и контейнеры Docker. Вы изучили различные методы поддержания чистой и организованной системы. В нем описаны команды для удаления всех неиспользуемых, непомеченных или определенных изображений по идентификатору или имени. Вы также узнали команды для удаления всех остановленных контейнеров или определенного контейнера по идентификатору или имени.
Удаление образов, томов и контейнеров Docker — это простой процесс, который может помочь вам управлять неиспользуемыми компонентами, высвобождая ценное дисковое пространство и часто повышая производительность системы.
Именно эта простота привлекает разработчиков в Docker, и нет более простого способа развернуть приложение, разработанное в Docker, чем с помощью платформы Kinsta Application Hosting. Вы можете попробовать это бесплатно прямо сейчас.