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

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

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

Введение

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


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/ContainerOperationsGroup(["Container Operations"]) docker(("Docker")) -.-> docker/ImageOperationsGroup(["Image Operations"]) docker/ContainerOperationsGroup -.-> docker/inspect("Inspect Container") docker/ImageOperationsGroup -.-> docker/pull("Pull Image from Repository") subgraph Lab Skills docker/inspect -.-> lab-555155{{"Как использовать команду docker image inspect для просмотра деталей образа"}} docker/pull -.-> lab-555155{{"Как использовать команду docker image inspect для просмотра деталей образа"}} end

Загрузка тестового образа

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

Для загрузки образа используется команда docker pull, за которой следует имя образа. Если вы не укажете тег, Docker по умолчанию загрузит тег latest.

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

docker pull hello-world

Вы должны увидеть вывод, похожий на этот, что означает загрузку образа:

Using default tag: latest
latest: Pulling from library/hello-world
2db29710123e: Pull complete
Digest: sha256:f5233545e4356188889db81cd1e163ee0d68e4b9b2863974888a98019dbf8591
Status: Downloaded newer image for hello-world:latest
docker.io/library/hello-world:latest

Этот вывод показывает, что Docker загружает тег latest образа hello-world из реестра Docker Hub (который используется по умолчанию). Строки с Pull complete указывают на то, что различные слои образа были успешно загружены.

Проверка образа в стандартном формате

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

Для проверки образа используется команда docker inspect, за которой следует имя или ID образа. Давайте проверим образ hello-world, который вы загрузили на предыдущем шаге.

docker inspect hello-world

Эта команда выведет большой объём информации об образе hello-world в стандартном формате. Вывод включает такие детали, как ID образа, дата создания, архитектура, операционная система и конфигурация.

[
  {
    "Id": "sha256:f5233545e4356188889db81cd1e163ee0d68e4b9b2863974888a98019dbf8591",
    "RepoTags": ["hello-world:latest"],
    "RepoDigests": [
      "hello-world@sha256:f5233545e4356188889db81cd1e163ee0d68e4b9b2863974888a98019dbf8591"
    ],
    "Parent": "",
    "Comment": "",
    "Created": "2023-03-07T21:50:09.004511104Z",
    "Container": "a928b81f51a91111111111111111111111111111111111111111111111111111",
    "ContainerConfig": {
      "Hostname": "a928b81f51a9",
      "Domainname": "",
      "User": "",
      "AttachStdin": false,
      "AttachStdout": false,
      "AttachStderr": false,
      "Tty": false,
      "OpenStdin": false,
      "StdinOnce": false,
      "Env": [
        "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
      ],
      "Cmd": ["/hello"],
      "Image": "sha256:f5233545e4356188889db81cd1e163ee0d68e4b9b2863974888a98019dbf8591",
      "Volumes": null,
      "WorkingDir": "",
      "Entrypoint": null,
      "OnBuild": null,
      "Labels": {}
    },
    "DockerVersion": "20.10.21",
    "Author": "",
    "Config": {
      "Hostname": "",
      "Domainname": "",
      "User": "",
      "AttachStdin": false,
      "AttachStdout": false,
      "AttachStderr": false,
      "Tty": false,
      "OpenStdin": false,
      "StdinOnce": false,
      "Env": [
        "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
      ],
      "Cmd": ["/hello"],
      "Image": "sha256:f5233545e4356188889db81cd1e163ee0d68e4b9b2863974888a98019dbf8591",
      "Volumes": null,
      "WorkingDir": "",
      "Entrypoint": null,
      "OnBuild": null,
      "Labels": null
    },
    "Architecture": "amd64",
    "Os": "linux",
    "Size": 1330,
    "VirtualSize": 1330,
    "GraphDriver": {
      "Data": null,
      "Name": "overlay2"
    },
    "RootFS": {
      "Type": "layers",
      "Layers": [
        "sha256:2db29710123e5455b34e722505b562504b39e55355e344405b54d3153a94650b"
      ]
    },
    "Metadata": {
      "LastTagTime": "0001-01-01T00:00:00Z"
    }
  }
]

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

Проверка образа в формате JSON

На предыдущем шаге вы проверили образ hello-world и увидели вывод в стандартном формате. Хотя этот формат информативен, его может быть сложно обрабатывать программно. Команда inspect в Docker позволяет указать формат вывода с помощью флага --format. Одним из распространённых и полезных форматов является JSON.

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

Давайте снова проверим образ hello-world, но на этот раз выведем информацию в формате JSON.

docker inspect --format json hello-world

Эта команда выведет ту же информацию, что и ранее, но отформатированную как массив JSON, содержащий один JSON-объект.

[
  {
    "Id": "sha256:f5233545e4356188889db81cd1e163ee0d68e4b9b2863974888a98019dbf8591",
    "RepoTags": ["hello-world:latest"],
    "RepoDigests": [
      "hello-world@sha256:f5233545e4356188889db81cd1e163ee0d68e4b9b2863974888a98019dbf8591"
    ],
    "Parent": "",
    "Comment": "",
    "Created": "2023-03-07T21:50:09.004511104Z",
    "Container": "a928b81f51a91111111111111111111111111111111111111111111111111111",
    "ContainerConfig": {
      "Hostname": "a928b81f51a9",
      "Domainname": "",
      "User": "",
      "AttachStdin": false,
      "AttachStdout": false,
      "AttachStderr": false,
      "Tty": false,
      "OpenStdin": false,
      "StdinOnce": false,
      "Env": [
        "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
      ],
      "Cmd": ["/hello"],
      "Image": "sha256:f5233545e4356188889db81cd1e163ee0d68e4b9b2863974888a98019dbf8591",
      "Volumes": null,
      "WorkingDir": "",
      "Entrypoint": null,
      "OnBuild": null,
      "Labels": {}
    },
    "DockerVersion": "20.10.21",
    "Author": "",
    "Config": {
      "Hostname": "",
      "Domainname": "",
      "User": "",
      "AttachStdin": false,
      "AttachStdout": false,
      "AttachStderr": false,
      "Tty": false,
      "OpenStdin": false,
      "StdinOnce": false,
      "Env": [
        "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
      ],
      "Cmd": ["/hello"],
      "Image": "sha256:f5233545e4356188889db81cd1e163ee0d68e4b9b2863974888a98019dbf8591",
      "Volumes": null,
      "WorkingDir": "",
      "Entrypoint": null,
      "OnBuild": null,
      "Labels": null
    },
    "Architecture": "amd64",
    "Os": "linux",
    "Size": 1330,
    "VirtualSize": 1330,
    "GraphDriver": {
      "Data": null,
      "Name": "overlay2"
    },
    "RootFS": {
      "Type": "layers",
      "Layers": [
        "sha256:2db29710123e5455b34e722505b562504b39e55355e344405b54d3153a94650b"
      ]
    },
    "Metadata": {
      "LastTagTime": "0001-01-01T00:00:00Z"
    }
  }
]

Формат JSON особенно полезен, когда вам нужно обработать вывод с помощью других инструментов или скриптов.

Проверка образа с использованием пользовательского шаблона Go

Помимо стандартного и JSON-форматов, команда docker inspect позволяет использовать шаблон Go для форматирования вывода. Это мощный инструмент, который позволяет извлекать конкретные поля и форматировать вывод именно так, как вам нужно.

Флаг --format принимает строку шаблона Go. Вы можете обращаться к полям проверяемого объекта, используя точечную нотацию. Например, для доступа к ID образа используется .Id. Для доступа к вложенным полям можно использовать цепочку точек, например .Config.Cmd для получения команды, которую выполнит контейнер.

Давайте проверим образ hello-world и извлечём ID образа и команду, которую выполнит контейнер.

docker inspect --format 'ID: {{.Id}} Command: {{.Config.Cmd}}' hello-world

В этой команде мы используем строку шаблона Go 'ID: {{.Id}} Command: {{.Config.Cmd}}'.

  • {{.Id}} обращается к полю Id объекта образа.
  • {{.Config.Cmd}} обращается к полю Cmd внутри объекта Config.

Вывод будет отформатирован согласно шаблону:

ID: sha256:f5233545e4356188889db81cd1e163ee0d68e4b9b2863974888a98019dbf8591 Command: [/hello]

Вы можете использовать шаблоны Go для извлечения любой информации, доступной в стандартном выводе docker inspect. Это особенно полезно для написания скриптов и автоматизации задач.

Итоги

В этой лабораторной работе вы научились использовать команду docker pull для загрузки Docker-образа из реестра, в частности, на примере образа hello-world. Затем вы изучили команду docker inspect для просмотра детальной информации о загруженном образе.

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