Dockerコマンドのお勉強

# `docker info` 全項目 日本語解説＋実践アドバイス付き

## 🔹 クライアント情報（Client）

| 項目 | 解説 |
|------|------|
| **Version** | `docker` CLIのバージョン。CLIとデーモンのバージョンが大きく異なると非互換の可能性があるため、同時アップデート推奨。 |
| **Context** | 複数のDockerデーモン（例：ローカル、リモート）を切り替える機能。`docker context create` で設定し、`docker context use` で切り替え可能。 |
| **Debug Mode** | クライアント側のデバッグモード。有効にするとコマンド実行時に詳細なログが出力され、トラブル対応に便利。 |
| **Plugins** | CLIで利用できるプラグイン（例：`buildx`, `compose`）。`/usr/libexec/docker/cli-plugins` に設置。 |

```
docker version -f 'json'
{"Client":{"Platform":{"Name":"Docker Engine - Community"},"Version":"28.1.1","ApiVersion":"1.49","DefaultAPIVersion":"1.49","GitCommit":"4eba377","GoVersion":"go1.23.8","Os":"linux","Arch":"amd64","BuildTime":"Fri Apr 18 09:52:10 2025","Context":"default"},"Server":{"Platform":{"Name":"Docker Engine - Community"},"Components":[{"Name":"Engine","Version":"28.1.1","Details":{"ApiVersion":"1.49","Arch":"amd64","BuildTime":"Fri Apr 18 09:52:10 2025","Experimental":"false","GitCommit":"01f442b","GoVersion":"go1.23.8","KernelVersion":"6.8.0-58-generic","MinAPIVersion":"1.24","Os":"linux"}},{"Name":"containerd","Version":"1.7.27","Details":{"GitCommit":"05044ec0a9a75232cad458027ca83437aae3f4da"}},{"Name":"runc","Version":"1.2.5","Details":{"GitCommit":"v1.2.5-0-g59923ef"}},{"Name":"docker-init","Version":"0.19.0","Details":{"GitCommit":"de40ad0"}}],"Version":"28.1.1","ApiVersion":"1.49","MinAPIVersion":"1.24","GitCommit":"01f442b","GoVersion":"go1.23.8","Os":"linux","Arch":"amd64","KernelVersion":"6.8.0-58-generic","BuildTime":"2025-04-18T09:52:10.000000000+00:00"}}

```

context=

| フィールド名                     | 意味                                                                                                     |
| -------------------------- | ------------------------------------------------------------------------------------------------------ |
| `"Name"`                   | コンテキストの名前（ここでは `default`）                                                                              |
| `"Metadata"`               | 将来拡張や追加情報のためのメタデータ。通常は空。                                                                               |
| `"Endpoints"`              | 接続先のエンドポイント定義。Docker 用の情報が入っている。                                                                       |
| → `"docker.Host"`          | Docker デーモンへの接続先。ここではローカルの Unix ソケット `/var/run/docker.sock` を使っている。<br>→ つまり「**ローカルの Docker に接続**」している |
| → `"docker.SkipTLSVerify"` | TLS の証明書検証をスキップするかどうか。通常は `false` で検証する。                                                               |
| `"TLSMaterial"`            | TLS 証明書・秘密鍵などの情報。ここでは `<IN MEMORY>` とあるので、ファイルとしては存在していない（または未使用）。                                     |
| `"Storage.MetadataPath"`   | メタデータの保存先。`<IN MEMORY>` は保存先が一時的で永続化されていないことを意味する。                                                     |
| `"Storage.TLSPath"`        | TLS 情報の保存場所。同様に `<IN MEMORY>`。                                                                         |


---

## 🔹 サーバ情報（Server）

### ▼ コンテナとイメージ

| 項目 | 解説 |
|------|------|
| **Containers** | 全コンテナ数。停止コンテナも含まれる。 |
| **Running / Paused / Stopped** | 状態別のコンテナ数。停止コンテナが多いとディスク圧迫の原因になるため `docker container prune` 推奨。 |
| **Images** | ローカルに存在するDockerイメージの数。未使用イメージは `docker image prune` 等で削除するのが望ましい。 |

---

### ▼ バージョン・ストレージ関連

| 項目 | 解説 |
|------|------|
| **Server Version** | Dockerデーモンのバージョン。CLIバージョンと一致させておくのが無難。 |
| **Storage Driver** | ストレージ管理方式。Linuxでは `overlay2` が最適で推奨。 |
| **Backing Filesystem** | Dockerが動作するホスト側のファイルシステム（通常はext4）。 |
| **Supports d_type** | ext4の `d_type` 機能が有効か。falseなら再フォーマットが必要な場合も。 |
| **Using metacopy** | メタデータだけをコピーする高速化技術。通常はfalseのままでOK。 |
| **Native Overlay Diff** | 差分検出をネイティブサポートしているか。trueなら高速な`docker diff`が可能。 |
| **userxattr** | ユーザー拡張属性。セキュリティやバックアップ用途で利用されるが、通常はfalse。 |

---

### ▼ ログ・リソース制御

| 項目 | 解説 |
|------|------|
| **Logging Driver** | ログ出力方法。デフォルトは `json-file`。大規模運用では `fluentd` や `journald` などに切り替える。 |
| **Cgroup Driver** | `systemd` を使用することでホストOSと整合性のあるリソース制御が可能。Kubernetesと併用する場合も必須。 |
| **Cgroup Version** | 使用中のcgroup世代（v1またはv2）。v2は細かな制御と統一的な構成が可能。 |

---

### ▼ プラグイン関連

| 種別 | 解説 |
|------|------|
| **Volume** | ストレージ管理用ドライバ（例：local, nfs）。 |
| **Network** | `bridge`, `host`, `overlay` などのネットワーク構成が可能。 |
| **Log** | `awslogs`, `fluentd`, `json-file`, `gelf` など、ログ出力形式の種類。 |

---

### ▼ Swarm

| 項目 | 解説 |
|------|------|
| **Swarm** | クラスタ構築機能（Swarmモード）。小規模で軽量なクラスタ用途に最適。Kubernetesより簡易。 |

---

### ▼ ランタイム

| 項目 | 解説 |
|------|------|
| **Runtimes / Default Runtime** | コンテナを起動する実行エンジン。通常は `runc`。GPU用途では `nvidia` に変更が必要。 |
| **Init Binary** | コンテナのPID 1プロセスとして動く初期化プロセス。Zombieプロセスの防止に重要。 |
| **containerd version** | Dockerが利用する軽量なコンテナ管理デーモンのバージョン。 |
| **runc version** | `runc`はOCI準拠のコンテナランタイム。 |
| **init version** | `docker-init` の内部バージョン。通常は意識しなくてよい。 |

---

### ▼ セキュリティ

| 項目 | 解説 |
|------|------|
| **apparmor** | Ubuntu標準のアクセス制御。強化したい場合は独自プロファイル作成も可能。 |
| **seccomp** | 危険なシステムコールを制限する。Dockerはデフォルトで制限済み。 |
| **cgroupns** | 名前空間ごとのcgroup隔離。マルチユーザーでのセキュリティ強化に有効。 |

---

## 🔹 ホスト環境

| 項目 | 解説 |
|------|------|
| **Kernel Version** | 実行中のLinuxカーネルバージョン。新機能対応やセキュリティのため、なるべく新しいバージョンを使用。 |
| **Operating System** | ホストのOS。Linuxでの動作が最も安定・高速。 |
| **OSType** | オペレーティングシステムの種類（Linux/Mac/Windows）。 |
| **Architecture** | CPUアーキテクチャ（例：x86_64、arm64）。ビルドアーキテクチャに関係する。 |
| **CPUs** | 使用可能なCPUコア数。コンテナに割り当て可能。 |
| **Total Memory** | 全メモリ容量。大量のイメージやビルドには大きめのメモリが必要。 |
| **Name** | ホストマシンの名前（`hostname` と同じ）。ネットワーク識別に使用される。 |
| **ID** | Dockerエンジンの一意識別子。Swarmなどのクラスタ構成時に利用。 |

---

## 🔹 その他設定

| 項目 | 解説 |
|------|------|
| **Docker Root Dir** | Dockerの作業ディレクトリ。デフォルトは `/var/lib/docker`。容量不足の場合、別ディスクへ変更可能。 |
| **Debug Mode** | サーバ側のデバッグログ出力。`/etc/docker/daemon.json` に `{"debug": true}` を書くことで有効化。 |
| **Experimental** | Dockerの実験的機能。安定版リリースに先立ちテストしたい場合に有効化。 |
| **Insecure Registries** | HTTPSなしでアクセスする非安全レジストリ一覧。**開発環境専用**で使うこと。 |
| **Live Restore Enabled** | デーモン再起動時でもコンテナを落とさずに維持する機能。高可用性を求める運用で有効にすべき。 |