Блог компании 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 среда не только экономит дисковое пространство, но и повышает производительность и снижает риск возникновения проблем, вызванных устаревшими или неиспользуемыми ресурсами. Поэтому всегда уделяйте время регулярному пересмотру и очистке не нужных образов, контейнеров и томов.