介绍
在这个实验中,你将学习如何使用 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 系统细节提供了灵活性。



