Docker-вещи: как безопасно останавливать и удалять контейнеры?
Docker-вещи: как безопасно останавливать и удалять контейнеры?

Предисловие

В этой статье пойдет речь о том, как останавливать, удалять контейнеры и ограничивать ресурсы на контейнерах.

Остановить и удалить контейнеры

🍑 Остановить контейнер

Во время работы иногда может потребоваться приостановить работу контейнера, например, чтобы сделать снимок файловой системы контейнера. Контейнеры можно приостанавливать и активировать с помощью команд docker-pause и docker unpause, при этом приостановленный контейнер не будет занимать ресурсы ЦП хоста.

Когда бизнес больше не нужен, контейнер необходимо закрыть. В этом случае можно использовать команду остановки докера. Если вы столкнулись с особыми обстоятельствами и не можете закрыть контейнер, вы также можете использовать команду docker kill для принудительного закрытия контейнера. Пример кода выглядит следующим образом:

В приведенном выше примере используется команда docker kill для принудительного завершения работы контейнера.

Предприятия обычно имеют большое количество контейнеров, которые необходимо эксплуатировать, и эксплуатация каждого из них потребует больших затрат рабочей силы и времени. В этом случае вы можете комбинировать команды Docker с регулярными выражениями для реализации пакетных операций с контейнерами.

Сначала проверьте идентификационный номер работающего контейнера. Пример кода выглядит следующим образом:

Затем используйте регулярные выражения, чтобы закрыть работающий контейнер на основе идентификационного номера работающего контейнера. Пример кода выглядит следующим образом:

В приведенном выше примере используется команда остановки Docker и регулярные выражения для пакетного завершения запуска контейнеров. Есть еще один способ написания этой команды. Пример кода выглядит следующим образом:

Кроме того, аналогичные методы можно использовать для пакетного удаления и запуска контейнеров.

Разница между остановкой докера и уничтожением докера заключается в следующем👇

  • docker stop При выполнении сначала отправьте контейнеру сигнал TERM, позвольте контейнеру выполнить некоторые защитные и безопасные операции, которые необходимо выполнить перед выходом, а затем позвольте контейнеру автоматически прекратить работу. Если существующий контейнер не прекращает работу в течение определенного периода времени, выполните снова. kill -9 Команда принудительного закрытия контейнера.
  • docker kill При выполнении, независимо от того, какой контейнер состояния или какая программа существует, выполняйте ее напрямую. kill -9 Команда принудительного закрытия контейнера.

🍑 Удалить контейнер

Контейнеры популярны из-за своего легкого веса. Обычно некоторые контейнеры выходят из строя вскоре после использования. Длительное накопление приводит к ненужной трате ресурсов, поэтому ненужные контейнеры следует своевременно убирать.

и docker rmi разные команды,docker rm Команда используется для удаления контейнера. Ниже будут представлены несколько способов удаления контейнера.

🍇Удалить контейнер, метод 1

Сначала просмотрите все контейнеры и их статус. Пример кода выглядит следующим образом:

Как видно из приведенного выше примера, в настоящее время на хосте находятся три контейнера в завершенном состоянии и один контейнер в рабочем состоянии.

Затем в сочетании с обычным и docker rm Команда выводит список контейнеров в завершенном состоянии и удаляет их. Пример кода выглядит следующим образом:

В приведенном выше примере используется команда docker rm в сочетании с регулярными выражениями для пакетного удаления контейнеров и вывода идентификаторов удаленных контейнеров.

Наконец, проверьте и подтвердите, что контейнер был удален. Пример кода выглядит следующим образом:

Как видно из примера, контейнер в завершенном состоянии был удален, но контейнер в рабочем состоянии не удален.

🍇 Способ 2 удаления контейнеров

Сначала просмотрите все контейнеры и их статус. Пример кода выглядит следующим образом:

Как видно из приведенного выше примера, три контейнера находятся в завершенном состоянии и один контейнер в рабочем состоянии.

Затем используйте команду docker rm в сочетании с регулярными выражениями, чтобы вывести список всех идентификаторов контейнера и удалить контейнер. Пример кода выглядит следующим образом:

Как видно из приведенного выше примера, во время выполнения команды произошла ошибка, указывающая на невозможность удаления работающего контейнера. Для принудительного выполнения можно использовать параметр -f.

Затем проверьте текущий статус контейнера. Пример кода выглядит следующим образом:

Как видно из приведенного выше примера,docker rm Команда в сочетании с регулярными выражениями удалила три контейнера в статусе «завершено», но работающие контейнеры не были удалены.

Наконец, добавьте -f Параметр, указывающий на принудительное удаление. Пример кода выглядит следующим образом:

Как видно из приведенного выше примера, работающий контейнер был удален.

🍇 Способ 3 удаления контейнеров

Сначала просмотрите текущий контейнер и его статус. Пример кода выглядит следующим образом:

Затем используйте команду docker rm в сочетании с docker ps -q -f status=exited, чтобы отфильтровать идентификационный номер контейнера в завершенном состоянии и удалить контейнер. Пример кода выглядит следующим образом:

В приведенном выше примере команда выполнена успешно.

Наконец, проверьте, был ли удален контейнер. Пример кода выглядит следующим образом.

Как вы можете видеть в приведенном выше примере, контейнеры в завершенном состоянии были удалены.

🍇 Способ 4 удаления контейнеров

Начиная с версии Docker 1.13, пользователи могут использовать команду сокращения контейнера docker для удаления контейнеров в прекращенном состоянии.

Сначала просмотрите текущий контейнер и его статус. Пример кода выглядит следующим образом:

Затем используйте команду, чтобы начать удаление всех контейнеров в завершенном состоянии. Пример кода выглядит следующим образом:

Как видно из приведенного выше примера, когда docker container prune После выполнения команды система выдаст пользователю предупреждающее сообщение и спросит, хотят ли они продолжить.

docker container prune Сразу удалю все в прекращенном состоянии изконтейнер,для Для предотвращения неправильной работы пользователей,Удалить полезный изконтейнер,При выполнении команды будет отображаться предупреждающая информация и информация запроса.

В настоящее время, если вы подтвердите удаление, вы можете ввести “y” , в противном случае введите “n” для предотвращения выполнения команды. В примере удаляются все контейнеры в завершенном состоянии и возвращается значение, которое освобождает память после успешного выполнения команды.

Наконец, просмотрите текущий контейнер и его статус. Пример кода выглядит следующим образом:

Как видно из приведенного выше примера, контейнер в завершенном состоянии был удален, но контейнер в рабочем состоянии не был затронут.

Ограничения ресурсов контейнера

существуют по умолчанию,Docker Контейнеры не имеют ограничений по аппаратным ресурсам. использовать Dcoker При запуске контейнеров на одном хосте могут работать сотни или тысячи контейнеров. Хотя эти контейнеры изолированы друг от друга, они используют одну и ту же основу. Процессор, память и диск и другие ресурсы.

Если ресурсы, используемые контейнером, не ограничены, потребление контейнером ресурсов хоста может привести к тому, что другие контейнеры или процессы не смогут нормально работать, а в серьезных случаях служба может быть полностью недоступна.

В этом разделе рассказывается, как настроить ограничения ресурсов для контейнеров, таких как ЦП, память и блок ввода-вывода.

🍑 Ограничить ресурсы памяти контейнера

На сервере Linux, если ядро ​​обнаруживает, что памяти (Память) недостаточно для выполнения важных системных функций, ядро ​​выдает сообщение OOME (Ошибка нехватки памяти, переполнение памяти) и начинает завершать процесс для освобождения памяти. называется операцией ООМ.

Любой процесс можно убить, включая Docker и другие важные приложения. Если критические системные процессы завершаются, вся система может быть парализована.

Хотя установка ограниченного лимита памяти может защитить хост, она также может привести к плохой работе служб в контейнере. Если лимит памяти, установленный для службы, слишком мал, при нормальной работе службы могут не хватить ресурсов;

Если установлено слишком большое значение, память будет расходоваться алгоритмом планировщика. Поэтому разумно следовать следующим принципам.

  1. дляapp для проведения стресс-тестирования Память,Понять ситуацию с Памятьизиспользовать при обычных бизнес-потребностях,Затем Затем войдите в производственную среду。
  2. Ограничить контейнериз Памятьиспользоватьверхний предел。
  3. Постарайтесь, чтобы ресурсов хоста было достаточно.,Как только в ходе мониторинга будет обнаружено недостаточность ресурсов,,Желающие расширить емкость перенесут контейнер.
  4. Память Когда ресурсов достаточно из,Постарайтесь не усложнять расчет Память.,Оказывает давление на планировщик.

Ниже представлены параметры ограничения памяти в параметрах запуска Docker.

  • -m,--memory

Установите максимальный объем памяти, который может использовать контейнер. Минимальное значение — 4 МБ.

  • --memory-swap

Установите максимальное значение памяти + Swap, которое может использовать контейнер.

  • --memory-swapiness

По умолчанию,Пользователь может настроить значение от 0~100из.,Представляет допустимое соотношение замены раздела подкачки Памяти.

  • --memory-reservation

Установите мягкое ограничение (необязательное ограничение) на использование памяти. Если Docker обнаружит, что на хосте недостаточно памяти, он выполнит операцию OOM. Это значение должно быть меньше значения, установленного параметром –memory.

  • --kernel-memory

Размер памяти ядра, которую может использовать контейнер. Минимальное значение — 4 МБ.

  • --oom-kill-disable

Установите, следует ли завершать процесс контейнера при запуске OOM.

Хост будет случайным образом завершать некоторые процессы при нехватке памяти, и этот параметр защитит процесс контейнера от завершения. Этот параметр можно использовать только путем установки параметра -memory для ограничения памяти контейнера, в противном случае контейнер исчерпает память хоста и приведет к завершению хост-приложения.

❗Примечание: --memory-swap имеет смысл только тогда, когда установлена ​​-memory.

Использование Swap позволяет контейнеру использовать всю доступную из Память и записывать избыточные требования к из Память на диск. Связь между ними показана в таблице.

Значения по умолчанию для двух вышеуказанных параметров: -1,Верноконтейнериспользовать Память и Swap Нет предела.

подиспользовать progrium/stress Зеркало, чтобы показать, как форконтейнер распространяет Память, какой контейнер можно смоделировать для стресс-тестирования. Пример кода выглядит следующим образом:

В приведенном выше примере выполняетсяконтейнер,Выделить доступный максимум Памятьдля 300 МБ, доступно Swap для 100MB。

Среди них параметр –vm 1 указывает на запуск рабочего потока Память

–vm-bytes 280M Параметр представляет распределение для каждого потока. 280MB Память。

Вы можете видеть, что система постоянно выделяет Память и отправляет Память в контейнер.,Цикл продолжается. Потому что использовать Из Память 380МБ, в пределах максимального существованияиспользовать (400МБ), контейнер работает нормально.

Следующий пример проверяет ситуацию, когда Памятьиспользовать превышает лимит. Пример кода выглядит следующим образом:

Как видно из приведенного выше примера, Квота была превышена, и процесс был прекращен. 9 Это сигнал к завершению процесса и, наконец, выход контейнера.

Если при создании контейнера указан только параметр -m и параметр -memory-swap не установлен, то значение -memory-swap по умолчанию равно удвоенному значению -m. Пример кода выглядит следующим образом:

существовать В приведенном выше примере,контейнербольшинствоиспользовать 100MB Памятьи 100MB Swap。

🍑 Ограничить ресурсы процессора контейнера

Процесс на хосте будет использовать механизм разделения временииспользовать CPU。CPU Количественно определяется частотой, то есть количеством операций, выполняемых в секунду. лимит дляконтейнера CPU Ресурсы — это не изменения CPU из частоты, но изменить каждый контейнер можноиспользоватьиз CPU срез времени.

В идеале ЦП должен все время находиться в вычислительном состоянии, и вычислительная нагрузка процесса не будет превышать вычислительные возможности ЦП.

Docker Разрешить пользователю один номер для каждой настройки контейнера, который представляет собой контейнеризацию. CPU доля, по контейнеру по умолчанию share значение 1000. этот share Значение относительно из и само по себе не представляет какого-либо определенного значения. Когда на хосте работает несколько контейнеров, каждый контейнер занимает CPU соотношение времени для итиз share Стоимость как доля от общей суммы.

Например, на хосте есть две машины, которые были CPU изконтейнер (для простоты понимания, независимо от других процессов, запущенных на хосте), и его CPU share Вседля 1000,затем два контейнера CPU использовать Ставка Вседа 50%;

Если вы поставите один из контейнеров share ценитьнастраиватьдля 500,то оба CPU изиспользовать Сравниватьдля 2:1 при удалении; share ценитьдля 1000 контейнер, оставшийся контейнер CPU использовать скорость будет 100%。

Docker дляконтейнернастраивать CPU Параметры ограничения ресурсов: -c или –cpu-shares, которое является целым числом. запустить два контейнера test01 и test02 и установите CPU Вес, пример кода следующий:

В приведенном выше примересоответственнодля test01 и test02 настраивать CPU share для 1000 и 2000。

затем,использовать docker stats Посмотреть заполняемость контейнера CPU В этом случае пример кода выглядит следующим образом:

Как видно из приведенного выше примера, два контейнера CPU изиспользоватьзанимать Сравниватьодля 2:1,иранеенастраиватьиз share Значения совпадают.

В это время это будет share ценитьдля 2000 из test02 Контейнер приостановлен, проверьте еще раз CPU использовать В этом случае пример кода выглядит следующим образом:

настраивать CPU Ограничения ресурсов — это нормальноиспользовать –cpuset-cpus Параметр, он может указывать определенную звезду CPU。здесьиспользовать CPU тестовое изображение agileek/cpuset-test При тестировании его функция заключается в CPU При заполнении пример кода выглядит следующим образом:

использовать Хозяин top Представление команд CPU использовать ситуацию, вы можете видеть CPU1 уже занят, и CPU0 Это не влияет, как показано на рисунке:

🍑 Ограничить контейнер Блокировать IO

Block IO Представляет дискиз чтения и записи, Docker Можно настроить с помощью бит/с (чтение и запись данных в секунду) iops (чтение и запись в секунду) режим Ограничить Контейнер по сравнению с диском. Чтение и запись с использованием пропускной способности.

Далее вводятся ограничения bps и iops изпараметр。

  • --device-read-bps

Ограничить чтение определенным устройством в бит/с.

  • --device-write-bps

Ограничить запись на определенное устройство в бит/с.

  • --device-read-iops

Ограничить чтение iops определенного устройства.

  • --device-write-iops

Ограничить запись на определенное устройство в iops.

По умолчанию,Чтение и запись всех дисков пары контейнеров по полосе пропускания одинакова.,через конфигурацию -blkio-weight Параметр из значения (10-1000) может быть указан в контейнере Block IO из Приоритет. –bkio-вес и -cpu-shares Аналогично, значения по умолчанию: 500。

Беги под двумя контейнерами test01 и test02, среди которых test01 Пропускная способность чтения и записи дисков есть. test02 дважды.

Как видно из приведенного выше примера, контейнер test01 относительное значение веса 800, в то время как test02 относительное значение веса 400, так что test01 Пропускная способность чтения и записи дисков есть. test02 дважды.

Запустите контейнер ниже и ограничьте его использование /dev/sda Скорость записи не выше 20 МБ/с. Поскольку файловая система дляконтейнера существует на хосте /dev/sda На компьютере запись файлов в существующемконтейнере эквивалентна записи файлов на хост-машину. /dev/sda Выполните операцию записи.

Пример кода выглядит следующим образом:

В приведенном выше примере выполняется CentOS контейнер и ограничить его запись /dev/sda изставкадля 20MB/s。

подпроходить Представление команд Долженконтейнеризписатьставка,Пример кода выглядит следующим образом:

от Как видно из приведенного выше примера, настройки имеют лимит записи изконтейнер, а скорость записи равна 19,4 МБ/с, лимит записи не превышен. 20MB/s。

Сравнить для,Следующее запускает программу, которая не ограничивает скорость записи изконтейнера,Пример кода выглядит следующим образом:

В приведенном выше примере,Неограниченная скорость чтения и записи изконтейнер,Скорость записи составляет 61,3 МБ/с.

Остальные параметры и методы аналогичны, можете попробовать сами🤗.

Подвести итог

Эти две статьи объясняют работу с помощью большого количества экспериментов. Docker методы контейнеризации, включая Enter, Stop, Удалить контейнер и т. д., а также способы преобразования между различными состояниями контейнера;

Наконец представили Docker контейнериз Ограничения ресурсов, в том числе предел Память、CPU、BLOCK IO Три метода.

- END -

boy illustration
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
boy illustration
Копикодер: этот инструмент отлично работает с Cursor, Bolt и V0! Предоставьте более качественные подсказки для разработки интерфейса (создание навигационного веб-сайта с использованием искусственного интеллекта).
boy illustration
Новый бесплатный RooCline превосходит Cline v3.1? ! Быстрее, умнее и лучше вилка Cline! (Независимое программирование AI, порог 0)
boy illustration
Разработав более 10 проектов с помощью Cursor, я собрал 10 примеров и 60 подсказок.
boy illustration
Я потратил 72 часа на изучение курсорных агентов, и вот неоспоримые факты, которыми я должен поделиться!
boy illustration
Идеальная интеграция Cursor и DeepSeek API
boy illustration
DeepSeek V3 снижает затраты на обучение больших моделей
boy illustration
Артефакт, увеличивающий количество очков: на основе улучшения характеристик препятствия малым целям Yolov8 (SEAM, MultiSEAM).
boy illustration
DeepSeek V3 раскручивался уже три дня. Сегодня я попробовал самопровозглашенную модель «ChatGPT».
boy illustration
Open Devin — инженер-программист искусственного интеллекта с открытым исходным кодом, который меньше программирует и больше создает.
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | SPPF сочетается с воспринимаемой большой сверткой ядра UniRepLK, а свертка с большим ядром + без расширения улучшает восприимчивое поле
boy illustration
Популярное и подробное объяснение DeepSeek-V3: от его появления до преимуществ и сравнения с GPT-4o.
boy illustration
9 основных словесных инструкций по доработке академических работ с помощью ChatGPT, эффективных и практичных, которые стоит собрать
boy illustration
Вызовите deepseek в vscode для реализации программирования с помощью искусственного интеллекта.
boy illustration
Познакомьтесь с принципами сверточных нейронных сетей (CNN) в одной статье (суперподробно)
boy illustration
50,3 тыс. звезд! Immich: автономное решение для резервного копирования фотографий и видео, которое экономит деньги и избавляет от беспокойства.
boy illustration
Cloud Native|Практика: установка Dashbaord для K8s, графика неплохая
boy illustration
Краткий обзор статьи — использование синтетических данных при обучении больших моделей и оптимизации производительности
boy illustration
MiniPerplx: новая поисковая система искусственного интеллекта с открытым исходным кодом, спонсируемая xAI и Vercel.
boy illustration
Конструкция сервиса Synology Drive сочетает проникновение в интрасеть и синхронизацию папок заметок Obsidian в облаке.
boy illustration
Центр конфигурации————Накос
boy illustration
Начинаем с нуля при разработке в облаке Copilot: начать разработку с минимальным использованием кода стало проще
boy illustration
[Серия Docker] Docker создает мультиплатформенные образы: практика архитектуры Arm64
boy illustration
Обновление новых возможностей coze | Я использовал coze для создания апплета помощника по исправлению домашних заданий по математике
boy illustration
Советы по развертыванию Nginx: практическое создание статических веб-сайтов на облачных серверах
boy illustration
Feiniu fnos использует Docker для развертывания личного блокнота Notepad
boy illustration
Сверточная нейронная сеть VGG реализует классификацию изображений Cifar10 — практический опыт Pytorch
boy illustration
Начало работы с EdgeonePages — новым недорогим решением для хостинга веб-сайтов
boy illustration
[Зона легкого облачного игрового сервера] Управление игровыми архивами
boy illustration
Развертывание SpringCloud-проекта на базе Docker и Docker-Compose