Docker - это технология контейнеризации программного обеспечения, которая помогает разработчикам создавать и развертывать приложения на различных платформах - от настольных компьютеров до облачных вычислений.
Снимок - или чертеж - исходного кода, зависимостей и инструментов, необходимых для создания приложения в контейнере Docker, называется образом. Приложения Docker, которым требуются постоянные данные, могут полагаться на хранилища, называемые томами, которые не зависят от базовой операционной системы.
Эффективная организация образов, томов и контейнеров очень важна при использовании Docker. Неиспользуемые воплощения этих активов могут накапливаться, занимая ценное дисковое пространство и в конечном итоге влияя на производительность системы.
В этой статье рассматриваются различные способы поддержания организации системы путем очистки образов (как по отдельности, так и всех сразу), томов и контейнеров. Для быстрого выполнения этих задач мы будем использовать интерфейс командной строки (CLI) docker.
Оглавление
Как удалять образы 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, оба помечены тегом latest. Третье изображение не имеет ни имени, ни тега. В данном случае это ”висящий” образ: образ, который в настоящее время не используется контейнером. Этот висящий образ возник в результате перестройки my_image (обычный сценарий). Предыдущая версия образа все еще находится в файловой системе, но сейчас не используется.
В листинге также отображаются первые 12 символов 64-символьного идентификатора каждого образа, даты создания и занимаемое образами пространство для хранения.
Удаление всех неиспользуемых образов
В приведенном выше примере листинга у нас есть висящее изображение. Однако возможно, что изображение без имени или тега является активным. Например, оно могло быть использовано для запуска контейнера путем обращения к его ID.
Чтобы безопасно удалить все изображения, которые действительно являются висячими, можно использовать команду 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 загромождать вашу систему! Узнайте, как эффективно очищать образы, тома и контейнеры с помощью этих удобных команд. 🙌 Нажмите для Твиттера
Удаление определенного образа по имени
Вы можете выбрать образ для удаления, указав его имя:
$ docker image rm <image_name>
Примечание: Вы не можете легко удалить используемые образы. Вы должны остановить или удалить запущенные контейнеры, использующие образы. Хотя это обычно не рекомендуется, вы можете принудительно удалить активный образ с помощью флага -f:
$ docker image rm <image_name> -f
Использование сокращения rmi для удаления образов
В Docker CLI есть сокращенный подход к удалению образов в виде псевдонима 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 для удаления любого конкретного образа, указав его ID:
$ docker rmi <image_id>
Удаление определенного образа по имени и тегу
Вы можете удалить определенный образ вместе с его именем и тегом с помощью команды docker rmi.
Например, если у вас есть несколько изображений с одинаковым именем, но разными тегами, вы можете удалить конкретное изображение, используя этот формат:
$ docker rmi <image_name>:<tag>
Этот метод удобен, когда вы хотите удалить определенную версию изображения вместо удаления всех изображений, связанных с хранилищем.
Удаление всех образов с тегом latest
В Docker тег “latest” относится к самой последней версии определенного образа Docker. Тег latest часто используется в качестве тега по умолчанию для образов Docker. Он автоматически присваивается самой последней сборке образа, если явно не указан другой тег.
Docker предоставляет команду для удаления всех образов с тегом “latest”:
$ docker rmi $(docker images | grep "latest" | awk '{print $3}')
Приведенная выше команда состоит из двух частей. Сначала она получает список идентификаторов образов, а затем передает этот список в качестве аргумента команде docker rmi.
Удаление образов из удаленного хранилища
Чтобы удалить образ из удаленного хранилища, такого как Docker Hub, вам сначала нужно войти в учетную запись с помощью Docker CLI.
Как только вы войдете в систему, вам нужно будет использовать команду 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 вы можете удалить определенный контейнер по ID, используя команду docker rm вместе с ID контейнера. Сначала получите все идентификаторы контейнеров с помощью команды docker ps:
$ docker ps -a -q
1ce3cdeb4035
06b79541e25c
fa98f1804e3e
$ docker rm 1ce3cdeb4035
Приведенная выше команда работает только в том случае, если контейнер находится в остановленном состоянии. Если контейнер запущен, то необходимо принудительно удалить его с помощью флага -f:
$ docker rm -f 1ce3cdeb4035
Удаление определенного контейнера по имени
Docker предоставляет многоцелевую команду docker rm для удаления контейнеров как по имени, так и по ID.
Например, если у вас есть контейнер с именем 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. Вы узнали о различных методах поддержания чистоты и организованности системы. Здесь были рассмотрены команды для удаления всех неиспользуемых, немаркированных или определенных образов по ID или имени. Вы также изучили команды для удаления всех остановленных контейнеров или определенного контейнера по идентификатору или имени.
Удаление образов, томов и контейнеров Docker - это простой процесс, который может помочь вам управлять неиспользуемыми компонентами, восстанавливая ценное дисковое пространство и зачастую повышая производительность системы.
Именно эта простота привлекает разработчиков к Docker, и нет более простого способа развернуть приложение, разработанное в Docker, чем платформа Application Hosting от Kinsta. Вы можете попробовать ее бесплатно прямо сейчас.