Блог компании 3v-Hosting
Как удалять образы, контейнеры и тома в Docker
9 мин.
Своим появлением в далеком 2013 году Docker произвел революцию в том, как мы можем разрабатывать, доставлять и запускать свои и не только свои приложения, используя технологию контейнеризации. Недавно мы писали о том, как установить Docker на сервер с ОС Ubuntu 22.04 и пользоваться им. Однако, если мы давно работаем с Docker, то наша система может накапливать значительное количество образов, контейнеров и томов Docker, которые нам больше не нужны. Эти остатки могут занимать ценное дисковое пространство и потенциально могут вызывать конфликты. Поэтому крайне важно знать, как эффективно удалять эти артефакты Docker, о чём и пойдёт речь в данной статье.
Что такое образы, контейнеров и тома в Docker
Прежде чем начать разбираться с тем, как удалять образы, контейнеры и тома - нам важно понять, что представляет из себя каждый из компонентов, с которыми мы будем иметь дело:
Образы Docker: это шаблоны, предназначенные исключительно для чтения и которые содержат код приложения и указания на все его зависимости. Образы используются для создания контейнеров Docker. Их можно скачивать с Docker репозитория, а также делиться своими образами, содержащими ваше приложение.
Контейнеры Docker: контейнеры — это экземпляры образов Docker в состоянии работы, запущенные, то есть во время их выполнения. Это небольшие изолированные среды со своим набором программного обеспечения, в которых работают приложения.
Тома Docker: тома используются для сохранения данных, сгенерированных и используемых контейнерами Docker, даже после их выключения. Можно представить себе том как постоянную память, некое пространство на жестком диске вашего сервера, которое выделенно исключительно для работы с определенным контейнером и которые можно легко переносить с одного места на диске на другое или даже между различными серверами, при переносе какого-то приложения целиком. Таким образом, если контейнер можно представить себе как небольшой отдельный сервер, то Том - это его жесткий диск.
Вот теперь, когда мы определились с основными понятиями - мы можем приступить к практике.
Удаление Docker образов
Docker образы могут быстро накапливаться в вашей системе, особенно если вы часто скачиваете и.или создаете новые образы. Вот как управлять ими и удалять их:
Отображение списка образов Docker
Перед удалением образов полезно посмотреть, какие образы в данный момент находятся в вашей системе. Используйте следующую команду для вывода списка всех образов Docker:
docker images
Эта команда отобразит список образов вместе с их репозиториями, тегами и размерами. Например:
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
<none> <none> 77af4d6b9913 19 hours ago 1.089 GB
committ latest b6fa739cedf5 19 hours ago 1.089 GB
<none> <none> 78a85c484f71 19 hours ago 1.089 GB
docker latest 30557a29d5ab 20 hours ago 1.089 GB
<none> <none> 5ed6274db6ce 24 hours ago 1.089 GB
postgres 9 746b819f315e 4 days ago 213.4 MB
postgres 9.3 746b819f315e 4 days ago 213.4 MB
postgres 9.3.5 746b819f315e 4 days ago 213.4 MB
postgres latest 746b819f315e 4 days ago 213.4 MB
Удаление определенного образа Docker
Чтобы удалить определенный Docker образ, вам понадобится идентификатор образа или имя и тег репозитория. Используйте следующую команду для удаления образа:
docker rmi <image_id>
Замените <image_id> фактическим идентификатором образа. Вы также можете использовать имя репозитория и тег:
docker rmi <repository>:<tag>
Например:
docker rmi ubuntu:latest
Принудительное удаление образов Docker
Иногда вы можете столкнуться с ситуацией, когда образ используется остановленным и запущеным контейнером, что препятствует его удалению. В таких случаях вы можете использовать флаг -f для принудительного удаления образа:
docker rmi -f <image_id>
Удаление всех Docker образов
ВАЖНО! Будьте осторожны со следующей командой, так как она удалит все образы из вашей системы.
Чтобы удалить все Docker образы из вашей системы, используйте следующую команду:
docker rmi $(docker images -q)
Находящаяся в скобках команда docker images -q выводит список всех идентификаторов образов, которые затем в виде параметра передаются команде docker rmi для их удаления.
Другие популярные статьи в нашем Блоге:
- Что такое LVM и как настроить LVM в Ubuntu
- Максимизация производительности: 10G серверы и сферы их применения
- Жонглирование процессами — Использование Linux команды ps с примерами
- Как открыть порт в UFW
Удаление Docker контейнеров
Контейнеры также могут накапливаться, особенно если вы часто создаете (запуская образы) и останавливаете контейнеры. Перед тем как удалить какой либо контейнер, советуем проверить список существующих контейнеров, чтобы не удалить чего лишнего.
Список контейнеров Docker
Чтобы вывести список всех контейнеров Docker, используйте следующую команду:
docker ps
Например:
$ docker ps --no-trunc
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ca5534a51dd04bbcebe9b23ba05f389466cf0c190f1f8f182d7eea92a9671d00 ubuntu:22.04 bash 17 seconds ago Up 16 seconds 3300-3310/tcp webapp
9ca9747b233100676a48cc7806131586213fa5dab86dd1972d6a8732e3a84a4d crosbymichael/redis:latest /redis-server --dir 33 minutes ago Up 33 minutes 6379/tcp redis,webapp/db
Как вы заметили у данной команды могут быть параметры. Например если добавить к этой команде параметр -а (--all), тогда эта команда отобразит все контейнеры, включая остановленные
Удаление определенного контейнера Docker
Чтобы удалить определенный контейнер, вам понадобится идентификатор или имя контейнера. Используйте следующую команду:
docker rm <container_id>
Замените <container_id> фактическим идентификатором или именем контейнера.
Принудительное удаление Docker контейнеров
Если контейнер запущен и вы хотите его удалить, сначала его нужно его остановить, ну или использовать флаг -f для принудительного удаления:
docker rm -f <container_id>
Удаление всех остановленных Docker контейнеров
Чтобы удалить все остановленные контейнеры, используйте следующую команду:
docker container prune
Эта команда запросит подтверждение перед удалением всех остановленных контейнеров.
Удаление Docker томов
Тома используются для сохранения данных, и со временем, после удаления старых контейнеров у вас могут накапливаться неиспользуемые тома. И чтобы они не засоряли драгоценное дисковое пространство их также можно удалить. Но для начала нам, так-же как и в случае с образами и контейнерами - нужно понимать, какие тома сейчас существуют в системе.
Список Docker томов
Чтобы получить список всех Docker томов, используйте следующую команду:
docker volume ls
Эта команда отобразит список томов вместе с их драйверами и именами. Например:
$ docker volume ls
DRIVER VOLUME NAME
local my_chat_app
local john_game_app
Удаление определенного Docker тома
Чтобы удалить определенный том, вам нужно имя тома. Используйте следующую команду:
docker volume rm <volume_name>
Замените <volume_name> фактическим именем тома.
Принудительное удаление томов Docker
Чтобы принудительно удалить том, можно использовать флаг -f:
docker volume rm -f <volume_name>
Удаление всех неиспользуемых Docker томов
Иногда бывает удобным удалить все неиспользуемые тома. Чтобы это следать, используйте следующую команду:
docker volume prune
Эта команда запросит подтверждение перед удалением всех неиспользуемых томов.
Расширенные методы очистки
Docker предоставляет множество дополнительных, удобных команд и методов, которые помогут вам более эффективно управлять средой своего Docker и очищать её по мере надобности.
Удаление Dangling образов
Например вы можете удалить так называемые Dangling образы, это образы, на которые не ссылается ни один контейнер. Чтобы сделать это, используйте следующую команду:
docker image prune
Автоматизация очистки Docker
Ручная очистка может быть утомительной, особенно если у вас много Docker ресурсов или вы управляете большим количеством серверов. Вы можете автоматизировать процесс очистки с помощью скрипта. Ниже приведен пример Bash скрипта для очистки образов, контейнеров и Docker томов:
#!/bin/bash
# Удалить все остановленные контейнеры
docker container prune -f
# Удалить все неиспользуемые тома
docker volume prune -f
# Удалить все Dangling образы
docker image prune -f
# Удалить все неиспользуемые образы
docker image prune -af
echo "Очистка Docker завершена."
Сохраните этот скрипт как docker_cleanup.sh, сделайте его исполняемым и периодически запускайте его, чтобы поддерживать чистоту Docker среды:
chmod +x docker_cleanup.sh
./docker_cleanup.sh
Заключение
Эффективное управление Docker образами, контейнерами и томами имеет большое значение для поддержания чистой и функциональной Docker среды, особенно, если в вашем управлении находятся десятки и сотни Docker серверов. Регулярно удаляя неиспользуемые и ненужные ресурсы, вы можете освободить дисковое пространство и избежать потенциальных конфликтов между приложениями в будущем.
Вооружившись этими базовыми командами, вы всегда можете адаптировать процесс очистки к своим конкретным потребностям, так как Docker - это очень гибкий инструмент, позволяющий легко кастомизировать его использование.
Но также он может потреблять множество ресурсов, поэтому всегда помните, что чистая Docker среда не только экономит дисковое пространство, но и повышает производительность и снижает риск возникновения проблем, вызванных устаревшими или неиспользуемыми ресурсами. Поэтому всегда уделяйте время регулярному пересмотру и очистке не нужных образов, контейнеров и томов.