はじめに
この実験では、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 システムの詳細にアクセスし、利用する方法に柔軟性がもたらされます。



