Docker アーキテクチャ概要
Docker は「ホスト」「クライアント」「イメージ」「レジストリ」「コンテナ」という 5 つの要素で構成される。ホストは仮想マシンや物理サーバで、Docker デーモンを稼働させる場所である。クライアントは CLI や API を通じてデーモンに指示を出す。イメージは実行ファイルや設定をパッケージ化したテンプレートであり、レジストリはそのイメージを保管する場所である。コンテナはイメージを元に起動したプロセス群であり、namespace と cgroup を使ってホスト OS のリソースを隔離・制限する。
namespace と cgroup
- MNT: ファイルシステムのマウントポイントを隔離
- User: UID/GID を独立させる
- UTS: ホスト名・ドメイン名を分離
- Net: ネットワークスタックを独立
- IPC: プロセス間通信リソースを隔離
- PID: プロセス番号空間を分離
カーネル 3.8 以上が前提。cgroup は CPU・メモリ・I/O などを制限する。
インストールと初期設定
# Ubuntu 22.04 の例
curl -fsSL https://get.docker.com | sudo bash -s -- --mirror Aliyun
sudo systemctl enable --now docker
レジストリミラーの追加
sudo tee /etc/docker/daemon.json >> /dev/null <<'EOF'
{
"registry-mirrors": ["https://inwpakr3.mirror.aliyuncs.com"]
}
EOF
sudo systemctl restart docker
リモート API を有効化
sudo mkdir -p /etc/systemd/system/docker.service.d
sudo tee /etc/systemd/system/docker.service.d/override.conf <<'EOF'
[Service]
ExecStart=
ExecStart=/usr/bin/dockerd -H fd:// -H tcp://0.0.0.0:2375 --containerd=/run/containerd/containerd.sock
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
他ホストからアクセスする場合は docker -H tcp://10.0.0.100:2375 info で確認できる。
非 root ユーザーの権限付与
sudo usermod -aG docker $USER
newgrp docker
ストレージとログのチューニング
sudo tee /etc/docker/daemon.json >>/dev/null <<'EOF'
{
"registry-mirrors": ["https://inwpakr3.mirror.aliyuncs.com"],
"data-root": "/data/docker",
"log-opts": {
"max-size": "300m",
"max-file": "2"
},
"live-restore": true
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
軽量 Linux ディストリビューション Alpine
Alpine Linux は apk パッケージマネージャを持ち、イメージサイズが 8 MB 程度に抑えられる。
docker pull alpine:3.19.1
docker run -it --rm alpine:3.19.1 sh
イメージ操作コマンド詳解
1. 取得 (pull)
docker pull [REGISTRY_HOST[:PORT]/]REPOSITORY[:TAG|@DIGEST]
省略時は Docker Hub の latest タグが選択される。
2. 検索 (search)
docker search --filter=stars=100 nginx
3. ローカル一覧
docker images --format "table {{.Repository}}:{{.Tag}}\t{{.Size}}"
4. 詳細情報
docker inspect alpine:3.19.1
5. エクスポート
docker save -o alpine-3.19.1.tar alpine:3.19.1
6. インポート
docker load -i alpine-3.19.1.tar
7. 削除
docker rmi -f alpine:3.19.1
8. 未使用イメージの一括削除
docker image prune -a -f
9. タグ付け
docker tag alpine:3.19.1 myrepo/alpine:v3
10. プロキシ経由での取得
国内から直接アクセスできないイメージは https://dockerproxy.com を利用して dockerproxy.com/library/ubuntu:22.04 のようにプレフィックスを付ける。