Docker イメージの仕組みと実践ガイド

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 のようにプレフィックスを付ける。

タグ: Docker containerd namespace cgroup AlpineLinux

5月22日 10:53 投稿