Управление контейнерами — Docker: Основы
Картинка описывает жизненный цикл контейнера. Кружками на нем изображены состояния, жирным выделены консольные команды, а квадратиками показывается то, что в реальности выполняется.
Проследите путь команды docker run . Несмотря на то, что команда одна, с точки зрения работы Docker выполняется два действия: создание контейнера и запуск. Существуют и более сложные варианты исполнения, но в этом разделе мы рассмотрим только базовые команды.
docker run
Запустим nginx так, чтобы он работал в фоне. Для этого после слова run добавляется флаг -d . Дополнительно, зададим контейнеру имя —name=nginx , чтобы упростить обращение к нему.
-d --name=nginx -p 8080:80 nginx 431a3b3fc24bf8440efe2bca5bbb837944d5ae5c3b23b9b33a5575cb3566444e
Убедитесь в том, что nginx работает, открыв в браузере ссылку localhost:8080 . Там вы увидите надпись Welcome to Nginx!.
docker logs
После запуска в фоне, Docker выводит идентификатор контейнера и возвращает управление в терминал. С одной стороны это позволяет работать программе независимо от терминала, с другой, мы теперь потеряли возможность смотреть логи в том месте, где мы ее запустили. Посмотреть логи можно командой docker logs , которой нужно передать идентификатор контейнера или его имя
# docker logs 431a3b3fc24bf8440efe2bca5bbb837944d5ae5c3b23b9b33a5575cb3566444e docker logs nginx 172.17.0.1 - - [19/Jan/2018:07:38:55 +0000] "GET / HTTP/1.1" 200 612 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36" "-"
docker logs выводит текущий лог и завершает работу, что бывает неудобно, если логи нужно просматривать в реальном времени. Для этого можно держать их постоянно открытыми по принципу работы команды tail -f . Для этого запустите docker logs -f 431a3b3fc24bf8440efe2bca5bbb837944d5ae5c3b23b9b33a5575cb3566444e . Теперь лог будет обновляться каждый раз, когда вы обновляете страницу в браузере. Выйти из этого режима можно набрав Ctrl + C , при этом сам контейнер остановлен не будет.
docker ps
Теперь выведем информацию о запущенных контейнерах командой docker ps :
"nginx -g 'daemon of…" 2 minutes ago Up 2 minutes 80/tcp nginx
- CONTAINER_ID — идентификатор контейнера. Так же, как и в git, используется сокращенная запись хеша
- IMAGE — имя образа, из которого был поднят контейнер. Если не указан тег, то подразумевается latest
- COMMAND — команда, которая выполнилась на самом деле при старте контейнера
- CREATED — время создания контейнера
- STATUS — текущее состояние
- PORTS — проброс портов
- NAMES — алиас. Docker позволяет кроме идентификатора иметь имя. Так гораздо проще обращаться с контейнером. Если при создании контейнера имя не указано, то Docker самостоятельно его придумывает. В выводе выше как раз такое имя у nginx
Команда docker ps выводит только запущенные контейнеры. Но кроме них могут быть и остановленные. Причем остановка может происходить как по успешному завершению, так и в случае ошибок. Попробуйте набрать docker run ubuntu ls , а затем docker run ubuntu bash -c «unknown» . Эти команды не запускают долгоживущий процесс, они завершаются сразу после выполнения, причем вторая с ошибкой, так как такой команды не существует.
Теперь выведем все контейнеры командой docker ps -a . Первыми тремя строчками вывода окажутся:
-a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 85fb81250406 ubuntu "bash -c unkown" Less than a second ago Exited (127) 3 seconds ago loving_bose c379040bce42 ubuntu "ls" Less than a second ago Exited (0) 9 seconds ago determined_tereshkova
Здесь как раз два последних запуска. Если посмотреть на колонку STATUS , то видно, что оба контейнера находятся в состоянии Exited . То есть запущенная команда внутри них выполнилась, и они остановились. Разница лишь в том, что один завершился успешно (0), а второй с ошибкой (127).
docker stop
Теперь попробуем остановить контейнер. Выполним команду:
# docker stop 431a3b3fc24b docker stop nginx 431a3b3fc24b
Остановка контейнера не удаляет его. Он будет отображаться в списке запущенных контейнеров:
-a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 431a3b3fc24b nginx "/docker-entrypoint.…" 7 seconds ago Exited (0) 1 second ago nginx
docker start
После остановки контейнер можно даже перезапустить:
# docker start 31a3b3fc24b docker start nginx
Запуск контейнера всегда стартует его в фоновом режиме, поэтому вы не увидите лога. Чтобы его посмотреть, воспользуйтесь командой docker logs nginx .
docker kill
docker stop шлет сигнал SIGTERM , который должен обработать приложение внутри контейнера и остановиться. Если оно настроено неправильно, то этого не произойдет и команда docker stop не сможет остановить контейнер. В этом случае понадобится docker kill . Эта команда использует сигнал SIGKILL , который гарантировано останавливает контейнер. Ее вывод идентичен:
# docker kill 431a3b3fc24b docker kill nginx 431a3b3fc24b
Открыть доступ
Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно
- 130 курсов, 2000+ часов теории
- 1000 практических заданий в браузере
- 360 000 студентов
Наши выпускники работают в компаниях:
Использование команд docker logs –follow и –tail
Мануал
Автор cryptoparty На чтение 3 мин Опубликовано 14.10.2022
Для разработчиков или инженеров DevOps/SecOps всегда важно просматривать логи приложения, чтобы отладить определенные проблемы или понять события, происходящие в вашем приложении.
В контексте Docker вы можете получить доступ к журналам Docker-контейнера с помощью docker CLI.
Эти логи содержат информацию, которая регистрируется контейнером, и могут помочь в устранении неполадок или мониторинге состояния приложения, когда это необходимо.
В этой статье мы рассмотрим, как просматривать журналы контейнеров docker.
Настройка лабораторной среды
Давайте скачаем образ Nginx из публичного dockerhub с помощью следующей команды.
docker pull nginx
Далее запустим Docker с Nginx с помощью приведенной ниже команды.
docker run nginx:latest
Теперь давайте проверим, запущен ли контейнер docker, с помощью команды $ docker ps.
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES dbc8526c6b7e nginx:latest "/docker-entrypoint.…" 19 seconds ago Up 12 seconds 80/tcp modest_kowalevski
Использование команды docker logs
Команда docker logs позволяет получить логи контейнера docker без необходимости входить внутрь контейнера.
Эти логи собираются из потоков STDOUT и STDERR контейнеров docker.
Логи хранятся на хосте docker в формате JSON, и на каждый контейнер всегда приходится один файл лога.
Синтаксис команды docker logs показан ниже.
docker logsДавайте разберемся в этом на примере.
Использование команды docker logs –follow
Теперь, когда контейнер запущен и работает, давайте просмотрим логи контейнера docker
docker logs dbc8526c6b7eгде мы указываем ID контейнера в команде и видим в терминале следующий вывод.
Эта команда покажет логи указанного контейнера docker.
Однако вы не сможете просматривать вывод непрерывно.
Чтобы просматривать логи непрерывно, мы можем создать непрерывный поток вывода на терминал с помощью опции –follow.
docker logs --followПриведенная выше команда будет передавать последние выходные данные из контейнеров stdout и stderr, и вы сможете отслеживать логи в режиме реального времени до тех пор, пока не остановите процесс.
Этот механизм может быть очень полезен в ситуациях, когда вам нужно устранить неполадки в производственных системах, отслеживая логи контейнеров docker в режиме реального времени.
Использование команды docker logs –tail
Должна возникнуть ситуация, когда вы хотите ограничить количество строк лога контейнера, выводимых на экран.
Команды logs у Docker предоставляют опцию –tail, которая может помочь достичь этой цели.
Давайте рассмотрим это на примере.
docker logs --tailДавайте просмотрим 10 строк вывода нашего контейнера Nginx с помощью приведенной ниже команды.
docker logs --tail 10 dbc8526c6b7eЗаключение
В этой статье мы узнали о том, как просматривать логи контейнеров docker.
- Как очистить логи запущенных контейнеров Docker
- Почему процессы в контейнерах Docker не должны запускаться от имени Root
- Как проверить изменения в файловой системе контейнера Docker
- Как просмотреть историю событий Docker
- Как автоматически обновлять контейнеры Docker из реджестри образов
- Как запустить несколько контейнеров Docker на разных IP-адресах
- Как использовать Docker с UFW параллельно
- Как запустить несколько служб в одном контейнере Docker
- Как установить Docker на Kali Linux
Пожалуйста, не спамьте и никого не оскорбляйте. Это поле для комментариев, а не спамбокс. Рекламные ссылки не индексируются!
Добавить комментарий Отменить ответ
Поддержать нас
- Аудит ИБ (49)
- Вакансии (12)
- Закрытие уязвимостей (110)
- Книги (27)
- Мануал (2 359)
- Медиа (66)
- Мероприятия (39)
- Мошенники (23)
- Обзоры (831)
- Обход запретов (34)
- Опросы (3)
- Скрипты (116)
- Статьи (360)
- Философия (124)
- Юмор (18)
Наш Telegram
Социальные сети
ПоделитьсяAnything in here will be replaced on browsers that support the canvas element
- Каковы различные форматы сертификатов? 27.10.2023
Цифровые сертификаты могут использоваться для различных целей. Они могут использоваться для защиты соединений с веб-сайтами, для шифрования сообщений электронной почты или для проверки личности пользователя. Выбор правильного формата сертификата необходим для обеспечения безопасности и сохранности данных. Когда речь идет о различных форматах сертификатов, важно выбрать тот, который соответствует вашим потребностям Выберите формат сертификата, совместимый с […]
Преобразование файла PFX (PKCS #12) в формат PEM (Privacy Enhanced Mail) достаточно просто на Linux и Unix-подобных системах. В этой статье мы рассмотрим, как преобразовать файл сертификата в формате PFX в файл PEM с помощью OpenSSL из командной строки. Что такое файл PFX? PFX (также PKCS#12) – это формат файла, содержащего сертификат(ы) и закрытый(ые) ключ(ы), […]
Одним из основных нововведений, появившихся в Podman, стала возможность запуска контейнеров без прав root. С точки зрения безопасности это было существенным улучшением, поскольку потенциально скомпрометированный контейнер, запущенный от имени root, представляет собой угрозу безопасности для хост-системы. Чтобы добиться аналогичного поведения, последние версии Docker поддерживают запуск демона docker в пользовательском контексте. Почему процессы в контейнерах […]
Small Form Factor Pluggable (SFP) – это компактный приёмопередатчик, который устанавливается в SFP порт коммутатора Ethernet. Модуль используется для присоединения платы сетевого устройства к оптическому волокну или витой паре. Модули SFP заменили устаревшие модули GBIC благодаря своим миниатюрным размерам. Это преимущество в размерах позволяет им эффективно работать в ограниченных сетевых средах, обеспечивая быстрый обмен данными […]
Давайте поговорим о классификации вредоносных программ. Когда антивирусная программа или средство защиты от вредоносного ПО обнаруживает что-то потенциально вредоносное, она использует определенный формат, чтобы помочь вам или другим специалистам понять, с какой именно угрозой вы имеете дело. Формат может выглядеть примерно так: Type:Platform/Family.Variant!Suffixes Это не всегда будет выглядеть именно так, поскольку, как вы помните, не […]
Просмотр docker logs
Для просмотра логов из контейнера используется удобная и понятная команда docker logs.
Что еще удобного есть в команде docker logs?
- —follow — просматривать логи в режиме реального времени (-f)
- —details — выводить дополнительную информацию в логах
- —tail n — выводить последние n логов. Удобно если контейнер пишет очень много логов, а нам интересна лишь ее последняя часть.
- —since и —until — показывать логи в определенном интервале, заданным timestamp (2018-11-014T21:23:37) или вида 1m, 30m и так далее.
- —timestamps или -t — показывать время логов.
Leave a Comment Отменить ответ
Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.
Как увидеть результат запуска контейнера?
Я на основе образа ubuntu собрал контейнер. его суть в том, что устанавливается и запускается консольный монитор ресурсов ОС. Вот докерфайл:
FROM ubuntu RUN apt-get -y update && apt-get install -y htop CMD ["/bin/sh", "-c", "export TERM=xterm && /usr/bin/htop"]
Контейнер собрался успешно, но после запуска я не могу увидеть результат работы. дело в том, что после запуска команды:
docker run ubuntu-htop
ничего не происходит. Я ожидаю, что откроется отдельное окно с выводом инофрмации о системных ресурсах ОС, но этого не происходит. Подскажите пожалуйста в чём суть проблемы и как её решить. Моя ОС linux mint 17