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
Углубленный анализ переполнения памяти CUDA: OutOfMemoryError: CUDA не хватает памяти. Попыталась выделить 3,21 Ги Б (GPU 0; всего 8,00 Ги Б).
boy illustration
[Решено] ошибка установки conda. Среда решения: не удалось выполнить первоначальное зависание. Повторная попытка с помощью файла (графическое руководство).
boy illustration
Прочитайте нейросетевую модель Трансформера в одной статье
boy illustration
.ART Теплые зимние предложения уже открыты
boy illustration
Сравнительная таблица описания кодов ошибок Amap
boy illustration
Уведомление о последних правилах Points Mall в декабре 2022 года.
boy illustration
Даже новички могут быстро приступить к работе с легким сервером приложений.
boy illustration
Взгляд на RSAC 2024|Защита конфиденциальности в эпоху больших моделей
boy illustration
Вы используете ИИ каждый день и до сих пор не знаете, как ИИ дает обратную связь? Одна статья для понимания реализации в коде Python общих функций потерь генеративных моделей + анализ принципов расчета.
boy illustration
Используйте (внутренний) почтовый ящик для образовательных учреждений, чтобы использовать Microsoft Family Bucket (1T дискового пространства на одном диске и версию Office 365 для образовательных учреждений)
boy illustration
Руководство по началу работы с оперативным проектом (7) Практическое сочетание оперативного письма — оперативного письма на основе интеллектуальной системы вопросов и ответов службы поддержки клиентов
boy illustration
[docker] Версия сервера «Чтение 3» — создайте свою собственную программу чтения веб-текста
boy illustration
Обзор Cloud-init и этапы создания в рамках PVE
boy illustration
Корпоративные пользователи используют пакет регистрационных ресурсов для регистрации ICP для веб-сайта и активации оплаты WeChat H5 (с кодом платежного узла версии API V3)
boy illustration
Подробное объяснение таких показателей производительности с высоким уровнем параллелизма, как QPS, TPS, RT и пропускная способность.
boy illustration
Удачи в конкурсе Python Essay Challenge, станьте первым, кто испытает новую функцию сообщества [Запускать блоки кода онлайн] и выиграйте множество изысканных подарков!
boy illustration
[Техническая посадка травы] Кровавая рвота и отделка позволяют вам необычным образом ощипывать гусиные перья! Не распространяйте информацию! ! !
boy illustration
[Официальное ограниченное по времени мероприятие] Сейчас ноябрь, напишите и получите приз
boy illustration
Прочтите это в одной статье: Учебник для няни по созданию сервера Huanshou Parlu на базе CVM-сервера.
boy illustration
Cloud Native | Что такое CRD (настраиваемые определения ресурсов) в K8s?
boy illustration
Как использовать Cloudflare CDN для настройки узла (CF самостоятельно выбирает IP) Гонконг, Китай/Азия узел/сводка и рекомендации внутреннего высокоскоростного IP-сегмента
boy illustration
Дополнительные правила вознаграждения амбассадоров акции в марте 2023 г.
boy illustration
Можно ли открыть частный сервер Phantom Beast Palu одним щелчком мыши? Супер простой урок для начинающих! (Прилагается метод обновления сервера)
boy illustration
[Играйте с Phantom Beast Palu] Обновите игровой сервер Phantom Beast Pallu одним щелчком мыши
boy illustration
Maotouhu делится: последний доступный внутри страны адрес склада исходного образа Docker 2024 года (обновлено 1 декабря)
boy illustration
Кодирование Base64 в MultipartFile
boy illustration
5 точек расширения SpringBoot, супер практично!
boy illustration
Глубокое понимание сопоставления индексов Elasticsearch.
boy illustration
15 рекомендуемых платформ разработки с нулевым кодом корпоративного уровня. Всегда найдется та, которая вам понравится.
boy illustration
Аннотация EasyExcel позволяет экспортировать с сохранением двух десятичных знаков.