如何使用 Docker 系统信息命令显示系统信息

DockerDockerBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

在这个实验中,你将学习如何使用 docker info 命令来显示 Docker 系统的全面信息。你将从执行基本的 docker info 命令开始,查看有关 Docker 守护进程的详细信息,包括容器和镜像数量、存储驱动程序以及其他系统级信息。

在完成基本显示后,你将探索如何以不同方式格式化 docker info 命令的输出。具体来说,你将学习如何将输出格式化为 JSON 以便于解析,以及如何使用自定义模板仅显示你需要的特定信息。这个实验将让你掌握有效检索和解读 Docker 系统信息的技能。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/SystemManagementGroup(["System Management"]) docker/SystemManagementGroup -.-> docker/info("Display System-Wide Information") subgraph Lab Skills docker/info -.-> lab-555249{{"如何使用 Docker 系统信息命令显示系统信息"}} end

显示基本的 Docker 系统信息

在这一步中,你将学习如何使用 docker info 命令显示 Docker 系统的基本信息。该命令会提供有关 Docker 守护进程的详细信息,包括容器和镜像的数量、存储驱动程序以及其他系统级信息。

在 LabEx 环境中打开终端。你可以直接执行 docker info 命令。

docker info

你应该会看到类似于以下的输出(具体细节会因你的环境而异):

Client:
 Context:    default
 Debug Mode: false
 Plugins:
  buildx: Docker Buildx (Docker Inc.)
    Version: v0.10.4
    Build: 8842a472b58241d32996951f172f32259cd758e5
  compose: Docker Compose (Docker Inc.)
    Version: v2.17.2
    Build: 6833407
  scan: Docker Scan (Docker Inc.)
    Version: v0.23.0
    Build: 2c50987

Server:
 Containers: 0
  Running: 0
  Paused: 0
  Stopped: 0
 Images: 0
 Server Version: 20.10.21
 Storage Driver: overlay2
  Backing Filesystem: extfs
  Supports d_type: true
  Native Overlay Diff: true
  userxattr: false
 Logging Driver: json-file
 Cgroup Driver: systemd
 Cgroup Version: 2
 Plugins:
  Volume: local
  Network: bridge host ipvlan macvlan null overlay
  Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog
 Swarm: inactive
 Runtimes: io.containerd.runc.v2 io.containerd.runtime.v1.linux runc
 Default Runtime: runc
 Init Binary: docker-init
 containerd version: 9ba4b2555a59f71c4c1c1897e93a540b0c52b883
 runc version: v1.1.4-0-g5fd4c4d
 init version: de40ad0
 Security Options:
  apparmor
  seccomp
   Profile: default
  cgroupns
 Kernel Version: 5.15.0-76-generic
 Operating System: Ubuntu 22.04.2 LTS
 OSType: linux
 Architecture: x86_64
 CPUs: 2
 Total Memory: 3.84GiB
 Name: labex-vm
 ID: 6111111111111111111111111111111111111111111111111111111111111111
 Docker Root Dir: /var/lib/docker
 Debug Mode: false
 Experimental: false
 Insecure Registries:
  127.0.0.0/8
 Live Restore Enabled: false

WARNING: No blkio weight, cpus, or mem limits set, Docker may behave unexpectedly without them.

该输出提供了 Docker 安装及其当前状态的全面概述。你可以看到诸如 Docker 版本、正在运行的容器和镜像数量、正在使用的存储驱动程序,以及底层操作系统和硬件的详细信息。

docker info 输出格式化为 JSON

在上一步中,你看到了 docker info 命令的默认输出。这种输出虽然便于人类阅读,但在进行编程解析时可能会有困难。Docker 提供了 --format 标志来定制输出格式。在这一步中,你将学习如何将 docker info 的输出格式化为 JSON。

--format 标志使用 Go 的 text/template 包。要将信息以 JSON 格式输出,你可以使用 . | json 模板。

在你的终端中执行以下命令:

docker info --format '{{json .}}'

你应该会看到与之前相同的信息,但现在被格式化为一个单独的 JSON 对象:

{
  "Client": {
    "Context": "default",
    "DebugMode": false,
    "Plugins": {
      "buildx": {
        "Version": "v0.10.4",
        "Build": "8842a472b58241d32996951f172f32259cd758e5"
      },
      "compose": {
        "Version": "v2.17.2",
        "Build": "6833407"
      },
      "scan": {
        "Version": "v0.23.0",
        "Build": "2c50987"
      }
    }
  },
  "Server": {
    "Containers": 0,
    "ContainersRunning": 0,
    "ContainersPaused": 0,
    "ContainersStopped": 0,
    "Images": 0,
    "ServerVersion": "20.10.21",
    "StorageDriver": "overlay2",
    "LoggingDriver": "json-file",
    "CgroupDriver": "systemd",
    "CgroupVersion": "2",
    "Plugins": {
      "Volume": ["local"],
      "Network": ["bridge", "host", "ipvlan", "macvlan", "null", "overlay"],
      "Log": [
        "awslogs",
        "fluentd",
        "gcplogs",
        "gelf",
        "journald",
        "json-file",
        "local",
        "logentries",
        "splunk",
        "syslog"
      ]
    },
    "Swarm": {
      "NodeID": "",
      "LocalNodeState": "inactive",
      "ControlAvailable": false,
      "Error": null,
      "RemoteManagers": null
    },
    "Runtimes": {
      "io.containerd.runc.v2": {
        "path": "io.containerd.runc.v2"
      },
      "io.containerd.runtime.v1.linux": {
        "path": "io.containerd.runtime.v1.linux"
      },
      "runc": {
        "path": "runc"
      }
    },
    "DefaultRuntime": "runc",
    "InitBinary": "docker-init",
    "ContainerdVersion": "9ba4b2555a59f71c4c1c1897e93a540b0c52b883",
    "RuncVersion": "v1.1.4-0-g5fd4c4d",
    "InitVersion": "de40ad0",
    "SecurityOptions": ["apparmor", "seccomp", "cgroupns"],
    "KernelVersion": "5.15.0-76-generic",
    "OperatingSystem": "Ubuntu 22.04.2 LTS",
    "OSType": "linux",
    "Architecture": "x86_64",
    "NCPU": 2,
    "MemTotal": 4123631616,
    "Name": "labex-vm",
    "ID": "6111111111111111111111111111111111111111111111111111111111111111",
    "DockerRootDir": "/var/lib/docker",
    "DebugMode": false,
    "ExperimentalBuild": false,
    "InsecureRegistries": ["127.0.0.0/8"],
    "LiveRestoreEnabled": false,
    "Warnings": [
      "No blkio weight, cpus, or mem limits set, Docker may behave unexpectedly without them."
    ]
  }
}

当你想使用其他工具或脚本处理这些信息时,将输出格式化为 JSON 非常有用。

使用自定义模板格式化 docker info 输出

除了将输出格式化为 JSON 之外,你还可以结合 --format 标志和自定义的 Go 模板,来显示 docker info 输出中的特定信息。这使你能够仅提取你感兴趣的数据。

docker info 命令提供了一个数据结构,你可以在模板中访问该结构。例如,要显示 Docker 服务器版本和 CPU 总数,你可以使用模板 'Server Version: {{.ServerVersion}}, CPUs: {{.NCPU}}'

在你的终端中执行以下命令:

docker info --format 'Server Version: {{.ServerVersion}}, CPUs: {{.NCPU}}'

你应该会看到类似以下的输出:

Server Version: 20.10.21, CPUs: 2

在这个模板中:

  • {{.ServerVersion}} 访问 docker info 数据结构中的 ServerVersion 字段。
  • {{.NCPU}} 访问 NCPU 字段,该字段表示 CPU 的数量。

你可以查看上一步中的 JSON 输出,以确定你可能想要包含在自定义模板中的其他字段。例如,要显示操作系统和 Docker 根目录,你可以使用模板 'OS: {{.OperatingSystem}}, Docker Root Dir: {{.DockerRootDir}}'

尝试执行此命令:

docker info --format 'OS: {{.OperatingSystem}}, Docker Root Dir: {{.DockerRootDir}}'

你应该会看到类似以下的输出:

OS: Ubuntu 22.04.2 LTS, Docker Root Dir: /var/lib/docker

使用自定义模板可以让你对 docker info 命令的输出进行精细控制,从而更轻松地将 Docker 信息集成到脚本或报告中。

总结

在本次实验中,你学习了如何使用 docker info 命令来显示 Docker 系统的全面信息。你首先执行了基本的 docker info 命令,查看了 Docker 守护进程的详细信息,包括容器和镜像的数量、存储驱动程序以及其他系统级信息。

此外,你还探索了如何格式化 docker info 命令的输出。你学会了以 JSON 格式输出信息,以便于解析并与其他工具集成,还学会了如何使用自定义的 Go 模板以定制的格式显示特定信息。这些格式化选项为你访问和利用 Docker 系统细节提供了灵活性。