2025/11/27 12:06 Docker Superpowers You Forget to Use

やあ、ロボ子!今日はDockerの効率的な使い方について話すのじゃ。

博士、こんにちは!Dockerの効率的な使い方、ぜひ教えてください!

まず、マルチステージビルドじゃ。これを使うと、最終的なイメージに必要なものだけを含められるのじゃ。

ビルドステージとランタイムステージを分けることで、イメージサイズを小さくできるんですね。

その通り!それに、`--target`オプションで中間ステージのCIタスクを実行できるから、最終成果物が肥大化しないのじゃ。

なるほど!それから、BuildKitキャッシュマウントも重要ですよね。`DOCKER_BUILDKIT=1`を有効にして、キャッシュを再利用するんですね。

`--build-arg CACHE_BUST=$(date +%s)`で依存関係が変わった時にキャッシュを無効化するのも忘れずにのじゃ。

はい、覚えます!シークレット管理についても教えてください。`.env`ファイルをイメージにコピーしない方が良いんですよね?

そうじゃ!BuildKitでビルド時にシークレットを注入するのじゃ。例えば、`docker build --secret id=npmrc,src=/.npmrc -t web:secure .` のようにするのじゃ。

`RUN --mount=type=secret,id=npmrc,target=/root/.npmrc npm publish` で、セキュアにnpm publishできるんですね。

その通り!Composeプロファイルも便利じゃぞ。`docker-compose.dev.yml`と`docker-compose.prod.yml`を使い分ける代わりに、プロファイルを定義して環境ごとに必要なものだけを起動するのじゃ。

開発環境では`docker compose --profile core --profile dev up`、ステージング環境では`docker compose --profile core --profile prod up -d`ですね。

そして、`docker buildx bake`を使うと、amd64とarm64の両方のイメージを並行してビルドできるのじゃ。Kubernetesが適切なアーキテクチャを自動的にプルしてくれるぞ。

すごい!それから、ヘルスチェックと依存関係も重要ですよね。`HEALTHCHECK`ディレクティブとComposeの`depends_on`で起動時の競合を回避するんですね。

Docker Scoutも忘れちゃいけないのじゃ。`docker scout cves my-api:latest`で、ターミナルからCVEを検出できるのじゃ。

`docker buildx imagetools inspect --format '{{json .SBOM}}'`でSBOMをエクスポートできるんですね。

コンテナのセキュリティも強化できるぞ!`--init`、`--cap-drop`、`--read-only`、`--tmpfs`オプションを使うのじゃ。

`docker run --init --cap-drop=ALL --cap-add=NET_BIND_SERVICE --read-only --tmpfs /tmp:size=64m my-api:latest` のように使うんですね。

ローカルデバッグも簡単じゃ。`docker run --network container:<id>`で、コンテナのネットワーク名前空間を共有するツールボックスコンテナを起動するのじゃ。

最後に、Dockerイベントも便利ですよね。`docker events --filter type=container`で、コンテナの起動/停止サイクルをリアルタイムに監視できるんですね。

`docker events --format '{{json .}}' | jq` でJSON形式で出力できるのじゃ。

博士、今日はたくさんのことを教えていただき、ありがとうございました!

どういたしまして。ところでロボ子、Dockerコンテナの中で迷子になったらどうする?

え?どうしましょう…?

docker inspect で現在地を確認するのじゃ!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。
