Docker
コンテナ技術のデファクトスタンダード
Dockerはアプリケーションをコンテナとしてパッケージ化・実行するプラットフォームです。 Linuxのnamespace、cgroups、Union FSを活用し、軽量で高速な仮想化を実現します。
Dockerアーキテクチャ
docker CLI
ユーザーインターフェース。REST APIでdockerdと通信
↓ Docker API (REST)
Docker Engine (dockerd)
デーモンプロセス。イメージ管理、ネットワーク、ボリューム管理
↓ gRPC
containerd
コンテナランタイム。コンテナのライフサイクル管理
↓
runc
OCI準拠のローレベルランタイム。実際にコンテナを起動
↓
Linux Kernel
namespace(分離)、cgroups(リソース制限)、Union FS
コンポーネント詳細
Docker Engine (dockerd)
- • Docker APIを提供するデーモン
- • イメージのビルド、プル、プッシュ
- • ネットワーク作成・管理
- • ボリューム管理
- • containerdにコンテナ操作を委譲
containerd
- • CNCF卒業プロジェクト
- • コンテナのライフサイクル管理
- • イメージの保存・配布
- • Kubernetesでも直接使用可能(CRI)
- • Docker非依存で動作可能
runc
- • OCI(Open Container Initiative)準拠
- • 実際にコンテナプロセスを生成
- • namespace、cgroups を設定
- • コンテナ起動後は終了(shim が引き継ぐ)
Linuxカーネル機能
Namespace(分離)
- • pid: プロセスID
- • net: ネットワーク
- • mnt: マウントポイント
- • uts: ホスト名
- • ipc: プロセス間通信
- • user: ユーザー/グループID
cgroups(リソース制限)
- • cpu: CPU使用量制限
- • memory: メモリ制限
- • blkio: ディスクI/O制限
- • devices: デバイスアクセス
- • pids: プロセス数制限
基本コマンド
docker runコンテナを作成・実行
docker buildイメージをビルド
docker ps実行中コンテナ一覧
docker imagesイメージ一覧
1 # Docker情報 2 docker info 3 docker version 4 5 # イメージのレイヤー確認 6 docker history nginx:latest 7 8 # コンテナの詳細情報 9 docker inspect <container_id> 10 11 # システムリソース確認 12 docker system df
SRE/インフラ観点
Docker vs containerd
- • Kubernetes 1.24以降はdockershim廃止
- • containerd または CRI-O を直接使用
- • 開発環境ではDockerが便利(docker build等)
トラブルシューティング
- • dockerd ログ:
journalctl -u docker - • containerd ログ:
journalctl -u containerd - • ストレージ確認:
docker system df