Как использовать команду docker container inspect для просмотра деталей контейнера

DockerDockerBeginner
Практиковаться сейчас

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

В этой лабораторной работе вы научитесь использовать команду docker inspect для просмотра детальной информации о Docker-контейнерах. Вы изучите, как инспектировать как работающие, так и остановленные контейнеры, поймете формат вывода по умолчанию в JSON и узнаете, как форматировать вывод с помощью шаблонов Go для кастомного представления данных. Кроме того, вы научитесь отображать информацию о размере контейнера с помощью команды docker inspect.

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


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/ContainerOperationsGroup(["Container Operations"]) docker/ContainerOperationsGroup -.-> docker/run("Run a Container") docker/ContainerOperationsGroup -.-> docker/ps("List Running Containers") docker/ContainerOperationsGroup -.-> docker/stop("Stop Container") docker/ContainerOperationsGroup -.-> docker/rm("Remove Container") docker/ContainerOperationsGroup -.-> docker/inspect("Inspect Container") subgraph Lab Skills docker/run -.-> lab-555110{{"Как использовать команду docker container inspect для просмотра деталей контейнера"}} docker/ps -.-> lab-555110{{"Как использовать команду docker container inspect для просмотра деталей контейнера"}} docker/stop -.-> lab-555110{{"Как использовать команду docker container inspect для просмотра деталей контейнера"}} docker/rm -.-> lab-555110{{"Как использовать команду docker container inspect для просмотра деталей контейнера"}} docker/inspect -.-> lab-555110{{"Как использовать команду docker container inspect для просмотра деталей контейнера"}} end

Инспекция работающего контейнера

На этом шаге вы научитесь инспектировать работающий Docker-контейнер. Команда docker inspect предоставляет детальную информацию о контейнере, включая его конфигурацию, сетевые настройки и состояние.

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

docker run -d --name my-running-container ubuntu sleep infinity

В приведенной команде:

  • docker run: Эта команда используется для запуска нового контейнера.
  • -d: Этот флаг запускает контейнер в detached mode (фоновом режиме).
  • --name my-running-container: Присваивает контейнеру имя для удобства обращения.
  • ubuntu: Используемый образ. Если образ отсутствует локально, Docker загрузит его.
  • sleep infinity: Команда, выполняемая внутри контейнера, которая поддерживает его работу бесконечно.

Теперь, когда контейнер запущен, мы можем его проинспектировать. Используйте команду docker inspect с указанием имени контейнера.

docker inspect my-running-container

Эта команда выведет большой JSON-объект, содержащий все детали о контейнере my-running-container. Вы можете просмотреть вывод, чтобы увидеть различные секции, такие как Id, State, Config, NetworkSettings и другие.

Для улучшения читаемости вывода или извлечения конкретной информации можно использовать инструменты вроде jq (легковесный обработчик JSON). Однако в этой лабораторной работе мы сосредоточимся на базовой команде docker inspect.

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

docker stop my-running-container
docker rm my-running-container
  • docker stop my-running-container: Останавливает работающий контейнер.
  • docker rm my-running-container: Удаляет остановленный контейнер.

Инспекция остановленного контейнера

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

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

docker run --name my-stopped-container ubuntu sleep 5

В этой команде:

  • docker run: Запускает новый контейнер
  • --name my-stopped-container: Присваивает имя контейнеру
  • ubuntu: Используемый образ
  • sleep 5: Команда, выполняемая внутри контейнера, которая приведёт к его завершению через 5 секунд

Подождите несколько секунд, пока контейнер выполнит команду sleep 5 и остановится. Вы можете проверить состояние контейнера, выведя список всех контейнеров (включая остановленные) с помощью docker ps -a.

docker ps -a

В списке вы увидите my-stopped-container со статусом, указывающим на его завершение.

Теперь вы можете проинспектировать остановленный контейнер с помощью команды docker inspect, как вы делали с работающим контейнером в предыдущем шаге.

docker inspect my-stopped-container

Вы снова увидите детализированный JSON-вывод. Обратите внимание, что в разделе State будет показана информация о статусе завершения контейнера и времени его остановки.

Инспекция остановленных контейнеров полезна для отладки или понимания причин их завершения.

Наконец, удалите остановленный контейнер.

docker rm my-stopped-container

Форматирование вывода inspect в JSON

На этом шаге вы узнаете, как форматировать вывод команды docker inspect в виде JSON-массива. Это особенно полезно при одновременной инспекции нескольких объектов (например, контейнеров или образов), так как обеспечивает структурированный вывод, который легко обрабатывается другими инструментами или скриптами.

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

docker run -d --name container1 ubuntu sleep infinity
docker run -d --name container2 ubuntu sleep infinity

Теперь проинспектируем оба контейнера, отформатировав вывод как JSON-массив. Для этого передадим несколько имен контейнеров в команду docker inspect.

docker inspect container1 container2

В результате вы получите единый JSON-массив, содержащий детали инспекции для обоих контейнеров - container1 и container2. Каждый элемент массива представляет собой JSON-объект с информацией об отдельном контейнере.

Этот формат используется по умолчанию при инспекции нескольких объектов и является стандартным способом представления списка структурированных данных.

После инспекции остановим и удалим контейнеры.

docker stop container1 container2
docker rm container1 container2

Форматирование вывода inspect с использованием Go-шаблонов

На этом шаге вы научитесь использовать Go-шаблоны для форматирования вывода команды docker inspect. Это позволяет извлекать конкретные данные из детализированного JSON-вывода и отображать их в пользовательском формате.

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

docker run -d --name my-templated-container ubuntu sleep infinity

Теперь проинспектируем этот контейнер, используя Go-шаблон для отображения только его IP-адреса. IP-адрес находится в поле NetworkSettings.IPAddress вывода inspect.

docker inspect --format '{{.NetworkSettings.IPAddress}}' my-templated-container

В этой команде:

  • --format '{{.NetworkSettings.IPAddress}}': Этот флаг задает формат с использованием Go-шаблона.
    • {{...}}: Двойные фигурные скобки обозначают действие в Go-шаблоне.
    • .: Представляет корневой объект инспекции (контейнер).
    • NetworkSettings: Обращается к полю NetworkSettings корневого объекта.
    • IPAddress: Обращается к полю IPAddress внутри объекта NetworkSettings.

Результатом выполнения команды будет только IP-адрес контейнера.

Go-шаблоны позволяют извлекать различную информацию. Например, чтобы получить имя и ID контейнера:

docker inspect --format 'Name: {{.Name}}, ID: {{.Id}}' my-templated-container

Это выведет что-то вроде: Name: /my-templated-container, ID: <container_id>.

Go-шаблоны предоставляют мощные возможности форматирования, включая условные операторы, циклы и функции. Однако в этом базовом примере мы просто обращаемся к полям.

После инспекции остановим и удалим контейнер.

docker stop my-templated-container
docker rm my-templated-container

Отображение информации о размере контейнеров

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

По умолчанию команда docker ps не отображает размер контейнеров. Чтобы включить эту информацию, можно использовать флаг --size или -s.

Сначала запустим простой контейнер.

docker run -d --name my-size-container ubuntu sleep infinity

Теперь выведем список работающих контейнеров с информацией о размерах.

docker ps --size

или

docker ps -s

В выводе вы увидите дополнительную колонку SIZE, которая содержит два значения:

  1. Размер записываемого слоя контейнера (изменения, внесенные в файловую систему контейнера с момента его создания)
  2. Общий размер контейнера, включающий размер слоев образа плюс записываемый слой

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

Также можно просмотреть информацию о размерах для всех контейнеров (включая остановленные), используя docker ps -a --size.

docker ps -a --size

Это полезно для просмотра размеров контейнеров, которые завершили работу, но еще не были удалены.

Понимание размеров контейнеров важно для управления дисковым пространством на вашем Docker-хосте.

В завершение остановим и удалим контейнер.

docker stop my-size-container
docker rm my-size-container

Итоги

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

Кроме того, вы изучили способы форматирования вывода docker inspect, включая вывод полных данных в формате JSON и использование Go-шаблонов для извлечения и отображения конкретных фрагментов информации. Наконец, вы узнали, как использовать флаг --size для включения информации о размере контейнера в результаты инспектирования.