Контейнеризация. Часть 3: UNLIMITED POWER!!!

3 May 2020

Контейнеризация. Часть 3: UNLIMITED POWER!!!

Дисклеймер

А ты похоже упорен и жаждешь знаний, раз дошел уже до третьей статьи про Docker. Ты, похоже, свыкся со специфичной подачей, странными отсылками и шакалистыми изображениями. Тем самым ты показал свое упорство, стремление к знаниям и целеустремленность. Поэтому у меня для тебя хорошие новости: сегодня я дам тебе ВЛАСТЬ, МОГУЩЕСТВО И БЕЗГРАНИЧНЫЙ КОНТРОЛЬ!!!

И тут ты уже такой «Ууу-уу, да»
И тут ты уже такой «Ууу-уу, да»

Но только над Docker — контейнерами. Алсо, если ты что-то забыл или сильно хитрый и прыгнул сразу на третью часть:

Напоминалка

В предыдущей статье я научил тебя кунг-фу рассказал, как создать основную функциональную единицу Docker-a — контейнер. Сегодня будет про то, как им хитро манипулировать.

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

Никакого равноправия
Никакого равноправия

Разбирать я буду сегодня команды служащие для:

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

Подопытное Docker — image

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

Контейнеризация. Часть 3: UNLIMITED POWER!!!

очень сложная структура
очень сложная структура
Контейнеризация. Часть 3: UNLIMITED POWER!!!

Информационные команды

Docker — это информация. Много — много информации. О версиях изображения, о состоянии контейнеров, о логах процессов, о размерах изображений и тд. и тп. И иногда ее нужно мониторить. В этом тебе помогут следующие команды:

  • docker ps — выводит список всех запущенных в настоящее время контейнеров. Выдает информацию об ID, базовом изображении контейнера, команде,поданной для запуска, времени создания, статусе, открытых портах и имени. Для ps существуют опции, изменяющие выдаваемый список изображений. Я не буду их все перечислять,для этого есть справка, напомню только о самых часто используемых
Контейнеризация. Часть 3: UNLIMITED POWER!!!
  • docker image ls — выводит список всех скачанных с репозиториев изображений вместе с их тегами, ID и размерами. Полезно для очистки места на компьютере,потому что при удалении репозитория изображения,использованные в нем, по умолчанию не удаляются.
Контейнеризация. Часть 3: UNLIMITED POWER!!!
  • docker stats — выводит в реальном времени статистику использования ресурсов локальной машины контейнерами. Выдает ID и имя контейнера, процент CPU и MEM, нагрузку на сети Интернет, количество потоков в каждом контейнере. Полезная штука, чтобы понять,что в развернутом в Docker приложении течет память).
Контейнеризация. Часть 3: UNLIMITED POWER!!!

Команды управления жизненным циклом контейнера

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

Контейнеризация. Часть 3: UNLIMITED POWER!!!
  • docker build — собирает контейнер из переданного контекста. Контекстом может быть: папка с Dockerfile, сам Dockerfile, tar-ник из интернета, URL. Но, в каком бы виде ты не передавал контекст в эту команду, там должен быть Dockerfile. Docker пока не настолько умный, чтобы читать твои хотелки прямо из головы.
Контейнеризация. Часть 3: UNLIMITED POWER!!!
  • docker run — создает в контейнере слой для записи и запускает в нем переданную команду. В целом аналогична инструкции RUN в Dockerfile. Обычно используется для того, чтобы запустить приложение и задать ему порты для приема/передачи.
Контейнеризация. Часть 3: UNLIMITED POWER!!!
Контейнеризация. Часть 3: UNLIMITED POWER!!!
  • docker start — просто стартует процесс остановленного контейнера, можно запустить в интерактивном режиме с помощью флага -i.
Контейнеризация. Часть 3: UNLIMITED POWER!!!
  • docker stop — угадай, что он делает? Правильно, посылает контейнеру SIGTERM, а после таймаута (по дефолту в 10 секунд) посылает SIGKILL, возьми с полки ничего.
Контейнеризация. Часть 3: UNLIMITED POWER!!!
  • docker restart — перезапускает контейнер. Когда контейнер стартанет, то начнет снова исполнять изначально заданную команду.
Контейнеризация. Часть 3: UNLIMITED POWER!!!
  • docker pause — посылает SIGSTOP всем процессам внутри контейнера и процессу самого контейнера. Возобновить можно соответственно командой unpause. Пример на это я уже писать не буду, сам догадаешься, что нужно сделать, это не сложно, просто поверь в себя.
  • docker rm — удаляет контейнер по ID или имени. Можно подать ссылку на другую команду, чтобы удалить список контейнеров. По умолчанию НЕ УДАЛЯЕТ анонимные папки, связанные с контейнером
Контейнеризация. Часть 3: UNLIMITED POWER!!!

Команды логирования

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

Контейнеризация. Часть 3: UNLIMITED POWER!!!
  • docker logs — поможет тебе избежать вышеописанных перспектив, да еще и логи позволит отображать.
Контейнеризация. Часть 3: UNLIMITED POWER!!!
  • docker inspect — выводит кучу инфы о контейнере в виде JSON. То, что он выводит, можешь посмотреть сам, запустив пример, написанный ниже. Ну серьезно, не хватало мне еще тут JSON-ы описывать.
Контейнеризация. Часть 3: UNLIMITED POWER!!!

Вместо послесловия

Вот ты и прочел про то, как управлять контейнерами. Можешь создать сто штук, заставить их выводить «You are the best» в консоль и тешить свое эго. А можешь проработать полученный материал и стать капельку мудрее. Говорят, от проработки материала увеличивается член и растет грудь, причем одновременно.

В следующий раз я поведаю тебе о best practices в мире Docker, расскажу почему Alpine — выбор мастеров и вообще буду онанировать на сэкономленные мегабайты, жди)

Подписывайтесь на наш канал!

Источник: IT Проповедник

А еще у нас есть Telegramm