コンテナの教科書
Docker・Podman・WSL2・VM との違い・devcontainer・CI/CD まで、コンテナ運用の基礎から実践までを体系的に解説します。"手元では動くのに CI で動かない" の壁を越えるための知識を集めました。
カテゴリから探す
目的に合わせてカテゴリを選んでください
実践ガイド
Dockerfile・Compose・devcontainer・CI/CD までの実践レシピ
はじめての Dockerfile
Node.js と Python の小さなアプリを題材に、最小構成の Dockerfile を書いてビルド・実行するまでの流れを通します。
マルチステージビルドで軽量化
ビルドツールや開発用依存を最終イメージに残さないための、マルチステージビルドの考え方と典型パターンをまとめます。
Compose で開発環境を立てる
Web + DB の典型構成を Compose で立てる例を通して、depends_on・volumes・.env の使い方をまとめます。
devcontainer で開発環境を配る
VS Code Dev Containers / GitHub Codespaces の仕組みを使い、リポジトリに `devcontainer.json` を置くだけで同じ開発環境を全員に配る方法をまとめます。
bind mount と UID/GID 問題
ホストとコンテナの UID/GID がずれて「コンテナが作ったファイルがホストから消せない」「Permission denied」に陥る問題を、原因と対処のパターンで整理します。
イメージ肥大化を防ぐ
レイヤー構成・.dockerignore・ベースイメージ選定の 3 つの観点から、コンテナイメージを小さく保つためのレシピをまとめます。
手元では動くのに CI で動かない
「ローカルでは動くのに CI で落ちる」の典型パターンを、アーキテクチャ差・ベースイメージ差・環境変数・タイムゾーンの 4 軸で切り分けます。
WSL2 で bind mount が激遅
WSL2 で `/mnt/c` 配下のソースをコンテナに bind mount すると、ビルドやテストが桁違いに遅くなる現象の原因と正しい置き場所。
WSL2 でポート転送できない
WSL2 上のコンテナに Windows ブラウザや同じ LAN の他端末から繋がらない問題。Windows ファイアウォール、`localhostForwarding`、`netsh portproxy` の順で切り分けます。
M1/M2 Mac で amd64 イメージが動かない
Apple Silicon で `exec format error` や `qemu: uncaught target signal` が出るときの切り分けと、`--platform`・`buildx`・`qemu-user-static` による対処。
bind mount で permission denied
bind mount したディレクトリにコンテナから書き込めない、読めない問題。UID/GID 不一致、SELinux の `:z`/`:Z` ラベル、rootless コンテナの user namespace を順に切り分けます。
イメージが肥大化している
数 GB に膨らんだイメージを `dive` と `docker history` で分析し、不要なレイヤーとキャッシュを剥がして劇的に縮小する手順。
コンテナが起動しない
「起動しない」ときに最初に確認すべき `docker ps -a` / `docker logs` / `docker inspect` の見方と、exit code 別の典型原因。
コンテナから外部に繋がらない
コンテナ内から `apt-get` / `npm install` / 外部 API が届かない問題。bridge / host ネットワーク、DNS 解決、プロキシの順で切り分けます。
GitHub Actions でコンテナをビルドする
GitHub Actions で Docker イメージをビルドして GHCR にプッシュするまでの最小構成と、実務で押さえるべき主要ポイント。
buildx のキャッシュ戦略
buildx で使える 3 種類のキャッシュ(registry / gha / inline)の特徴と使い分け、そして CI のビルド時間を実際に短縮するためのコツ。
マルチアーキテクチャビルドのベストプラクティス
amd64 と arm64 の両方に配布する必要が出てきたときの buildx 構成。QEMU エミュレーションを避けて時間を短縮する方法も。
CI でイメージを安全性チェック
Trivy / Grype による脆弱性スキャンと hadolint による Dockerfile lint を CI に組み込み、リスクの高い変更を自動で止めます。
GHCR / ECR へのプッシュ実践
GHCR と ECR それぞれへの安全な認証(OIDC)と、本番運用に耐えるタグ戦略(sha / semver / latest の使い分け)。
よく見られているトピック
まずはここからチェック
