Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. DevOps

Докер с нуля: работа с контейнерами, часть 2

by
Difficulty:IntermediateLength:ShortLanguages:
This post is part of a series called Docker from the Ground Up: Working with Containers.
Docker From the Ground Up: Working With Containers, Part 1

Russian (Pусский) translation by Ilya Nikov (you can also view the original English article)

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

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

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

Прежде чем начать, убедитесь, что Docker установлен правильно в вашей среде. В зависимости от того, как он установлен, и вашего пользователя, вам может потребоваться запустить его как sudo. Я пропущу sudo.

Листинг контейнеров

При работе с контейнерами вам часто надо будет получить список, просмотреть и фильтровать свои контейнеры. Команда docker ps - делает все это, и у нее есть несколько интересных вариантов.

Запуск контейнеров

Самая основная команда - docker ps без аргументов, которая показывает все текущие контейнеры.

Вы получаете много информации о каждом контейнере, включая идентификатор контейнера, образ, команду, когда он была создан, его текущий статус, его порты и имена. Из-за объема данных тяжело тут разобраться. Мы увидим позже, как фильтровать и форматировать вывод. Обратите внимание, что команда усечена (а также идентификатор контейнера). Чтобы показать полную команду, добавьте --no-trunc:

Теперь видна полная команда: nginx -g 'daemon off;'

Все контейнеры

Как вы помните, Docker продолжает останавливать контейнеры (если вы не запустили их с помощью --rm). Добавление -a показывает все контейнеры:

Форматирование

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

Это работает, но чтобы представить его с именами полей, добавьте «table» в начало строки формата:

Имя формата для идентификатора контейнера (не выбранного здесь) - {{.ID}}.

Фильтрация

Команда docker ps поддерживает множество фильтров. Они довольно просты в использовании. Синтаксис: -f "<filter> = <значение>". Поддерживаемые фильтры: id, label, name, exited, status, ancestor, before, since, isolation, network и health.

Здесь выполняется фильтрация по имени контейнера и отображается только контейнер busybox:

Флаг -q

Если все, что вам нужно, это идентификатор контейнера, используйте флаг -q (тихий флаг). Это проще, чем --format 'table {{.ID}}' . Это часто необходимо, когда вы хотите выполнять операции с несколькими контейнерами (вы увидите пример позже).

Остановка, запуск и перезапуск контейнеров

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

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

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

ОК. Nginx остановлен (статус « Exited»). Давайте начнем:

Перезапуск работающего контейнера - это еще один вариант, который эквивалентен docker stop, за которым следует docker start.

$ docker restart nginx

Присоединение к работающему контейнеру

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

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

Вы можете удалить остановленные контейнеры с помощью команды: docker rm <идентификатор контейнера или имя>

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

Если вы хотите удалить все контейнеры, вот удобный фрагмент команды:

docker rm -f $ (docker ps -aq)

Если вы хотите удалить только остановленный контейнер, удалите флаг -f (force).

Выполнение команды внутри исполняемого контейнера

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

Простые команды

Выполнение простой команды выполняется через docker exec. Вы предоставляете идентификатор или имя запускаемого контейнера и команду, которую вы хотите выполнить. Посмотрим файл nginx.conf внутри контейнера nginx и посмотрим, сколько рабочих процессов настроено.

Интерактивная оболочка

Одним из лучших методов устранения неполадок с контейнерами Docker является подключение к интерактивной оболочке и просто просмотр внутренней файловой системы. Чтобы прикрепить stdin и иметь tty, вам необходимо предоставить аргументы командной строки -i -t (можно сгруппировать как -it), а затем имя исполняемого файла оболочки (обычно bash).

Вы получаете доступ к оболочке вашего контейнера. Ниже приведен пример проверки рабочих процессов в интерактивном режиме из «внутри» контейнера.

Вывод

Docker - мощная платформа, и поскольку контейнер является его подразделением, он предоставляет множество инструментов для управления и работы с контейнерами. Я описал большинство важных аспектов работы с контейнерами, но есть множество дополнительных функций, опций и нюансов для команд, которые я рассмотрел, а также некоторые дополнительные команды.

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

Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.