Рубрики
Uncategorized

Срок эксплуатации контейнера Docker | Докер сделал легко # 3

Ссылка на видео: узнайте, как работает контейнер на основе … Помечено с докером, контейнером, дежопами, облачными.

Ссылка на видео: https://www.youtube.com/watch?v=ifvrfrimdaa

Узнайте, как работает контейнер, основанные на его состоянии жизненного цикла и команды Docker CLI для эффективного управления их

Вы когда-нибудь чувствовали себя пораженным множеством Докер CLI-команды?

Вы когда-нибудь были запутаны о том, что на самом деле происходит с вашими контейнерами Docker?

Если у вас есть, не волнуйтесь … ты не одинок. 🤗

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

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

Также будет намного проще перейти на более продвинутые решения для управления контейнерами, такие как Docker Compose, Docker Rash, Kubernetes или OpenShift и т. Д.

Итак, давайте узнаем о жизненном цикле контейнера, раз и для всех!

Вступление

В этом блоге мы будем:

  • узнать о различных состояниях контейнер может быть в
  • Узнайте, как управлять им, используя Докер выступ
  • четкие смущения относительно различий между
    • Дочсерская пауза и Докер Стоп
    • Докер Стоп и докер убить
  • конец с подробным представлением жизненного цикла контейнера

Мы также кратко обсудим сигналы POSIX.

Если вы еще не читали первые два блога на серии «Docker Make Easy», я настоятельно рекомендую вам сделать это.

Если вы не можете получить доступ к среде, попробуйте эти:

Хорошо, давайте начнем с поиска …

Контейнер жизненный цикл

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

Упрощенная диаграмма состояния жизненного цикла контейнера

Текст на стрелках соответствует Докер Команды, которые позволяют этому переходу.

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

  1. Созданный
  2. Бег
  3. Пауз
  4. Остановился
  5. Удаленный

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

Быстрый обзор сигналов POSIX

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

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

  • SIGTERM : Этот сигнал отправляется в процесс для запроса его прекращения. Это может быть поймано и интерпретировано или игнорируется процессом. Это позволяет процессу выполнять изящное расторжение, выделяющее ресурсы и сохранение состояния, если это необходимо.
  • SIGKILL : Этот сигнал отправляется в процесс, чтобы заставить его немедленно прекратить. В отличие от SIGTERM Этот сигнал не может быть пойман или игнорировать, и процесс получения не может выполнять какую-либо очистку после получения этого сигнала (исключая несколько исключений).

SIGTERM обычно предпочитает над SIGKILL Так как он дает шанс для изящного/безопасного прекращения процесса.

Если интересно, узнайте больше о сигналах здесь Отказ

Теперь давайте обсудим каждое состояние жизненного цикла контейнера один за другим …

Создано состояние

Это первое состояние жизненного цикла контейнера, который приходит после приобретения или создания изображения.

Прочитайте последний блог, чтобы узнать больше о том, как работает Docker Images.

Используя Docker Создать Команда, тонкий нарисованный слой создается над указанным изображением и подготовлен для запуска главной команды процесса ( CMD и/или enterPoint ).

ЗАМЕТКА: На этом состоянии контейнер создан, но не запускается.

Вот пример создания контейнера с использованием Nginx: Alpine Изображение и название ИТ App1 Отказ

docker create --name app1 nginx:alpine

Идентификатор нового контейнера печатается, если успешно создан.

Запуск состояния

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

Для создаваемого контейнера (используя Docker Создать ) или остановился, он может быть запущен запуск докера .

Итак, чтобы запустить App1, мы можем использовать —

docker start app1

Если вы не хотите явно Создать а потом Начать Контейнер, вы можете сделать оба шага сразу, используя Docker Run Отказ

Например —

docker run -d --name app2 nginx:alpine

Команда выше создает и запускает контейнер с именем App2 на заднем плане (как указано -d ).

Пауза

Запуск контейнера может быть приостановлен, используя Дочсерская пауза команда. Это имеет эффект приостановки (или замораживания) всех процессов в указанном контейнере.

При паузе состояния контейнера остается неповрежденным — как часть диска (файловой системы), так и в порция памяти (RAM).

ЗАМЕТКА: Контейнер, который приостановлен, не знает, что оно приостановлено.

Итак, если бы мы хотели приостановить App1, мы просто сделаем —

docker pause app1

Точно так же, чтобы вернуть паузу с паузой обратно на работу, мы использовали Упорядочить

docker unpause app1

Деталь внедрения (за пределами объема Scope): для реализации пауза , морозильная камера Cgroup используется вместо сигналов POSIX.

Остановил состояние

Контейнер, который останавливается, не имеет своих основных процессов активно работает (я знаю, Дух 🤷♀️).

При остановке, дисковая часть состояния сохраняется I.e. Сохранена.

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

Контейнер может быть остановлен в 4 основных способах:

  1. Используя Докер Стоп команда
  2. Используя Докер убить команда
  3. Когда основной процесс контейнера вышла/завершено
  4. Когда встречается «из исключения памяти» (OOE)

Давайте обсудим каждый индивидуально —

1. С помощью Докер Стоп команда

Эта команда так же просто, как —

docker stop app1

При выполнении основной процесс контейнера получает SIGTERM Сигнал (по умолчанию) и после льготного периода (по умолчанию 10S на запись), он получает SIGKILL сигнал.

2. С помощью докер убить команда

Когда вы запустите —

docker kill app2

SIGKILL Сигнал напрямую отправляется в основной процесс контейнера (поведение по умолчанию).

Это означает разницу между Докер Стоп а также докер убить в том, что — останавливаться может разрешить безопасное прекращение (в пределах льгота) в то время как убийство прекращается немедленно.

По этой причине Стоп является предпочтительным над Убить Отказ Обзор «Быстрый обзор сигналов POSIX» выше, если вы смущены.

Важно отметить, что Докер убить Также можно использовать для выдачи любого сигнала в процесс контейнера, используя - сигнал / -s Аргумент, а не только SIGKILL Отказ

Вот пример выдачи Сигинт сигнал —

docker kill -s SIGINT app1

3. Когда основной процесс вышла/завершено

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

Это может произойти, если

  • Основной процесс работает в исключением/прерывании
  • или если задача завершается через определенный момент времени (вместо того, чтобы запустить в бесконечной петле, как сервер)

Вот очень простой пример —

docker run alpine echo "hi"

Эта команда запускает эхо "привет" Команда внутри альпийского контейнера, печатает «Привет» к консоли и выходит сразу после эхо Команда сделана.

4. Когда встречается «из исключения памяти» (OOE)

Если ваши контейнеры пытаются использовать больше памяти, чем доступна система, вы можете испытывать из исключения памяти (OOE). В результате некоторые контейнеры или даже демон докера могут быть убиты ядром OOM Killer.

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

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

docker run -m 50m redis:alpine

Это запускает контейнер от Redis: Alpine Изображение с пределом памяти 50 МБ.

Чтобы узнать больше о управлении памятью и смягчающими рисками, связанными с OOME, обратитесь к Официальная документация Отказ

Удаленное состояние

Контейнер, который находится в созданном состоянии или остановлен, можно удалить с помощью Docker RM . Это приведет к удалению всех данных, связанных с контейнером, такими как процессы, файловая система, объемные и сетевые сопоставления и т. Д.

Если app1 останавливается, например, вы можете удалить его —

docker rm app1

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

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

docker rm -f app1

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

Расширенный контейнер жизненный цикл

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

Это должно быть проще понять, если вы прочитаете предшествующую дискуссию.

Или вы думаете, что я должен был начать с этого вместо упрощенного? Интересно услышать, что вы думаете.

Заключение

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

Как только мы узнаем основы контейнеров, мы можем сделать действительно мощные вещи с более продвинутыми инструментами, такими как Docker Compose, Docker Swarm, Kubernetes или OpenShift и т. Д.

Контейнеры потрясающие, и мы просто начинаем!

В следующем блоге Docker мы обсудим, как работает объемы на Docker.

До этого будьте смелыми и продолжайте учиться.

Но самое главное…

Технология ухода! 👋

Оригинал: «https://dev.to/alubhorta/the-docker-container-lifecycle-docker-made-easy-3-554o»