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

DockerBeginner
立即练习

介绍

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

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

显示基本的 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 系统细节提供了灵活性。