DevOps/コンテナ/Lesson 02
Docker — コンテナ・イメージ・Dockerfile
45分·theory
Docker — コンテナ・イメージ・Dockerfile
🎯 このレッスンを読み終えたら
このレッスンをすべて読み終えると、以下の3つを自信を持って実践できるようになります。
- ▸✅ Docker の4要素:イメージ・コンテナ・ボリューム・ネットワーク
- ▸✅ Dockerfile のマルチステージビルド + alpine
- ▸✅ docker-compose による複数コンテナの構成 (DB + Redis + アプリ)
学習目標をチェックリストとして手元に置き、すべてに答えられるようになったらレッスンを閉じましょう。
Docker vs VM + 基本概念
一言で言うと: VM = 家丸ごと借りる、コンテナ = 部屋一つ借りる。同じ OS カーネルを共有し、リソース消費が少ない。
基本概念:
Dockerfile + マルチステージビルド
Dockerfile — イメージビルドの仕様書:
主要な命令:
最適化のヒント:
- ▸変更頻度の高いファイルは最後に COPY する (キャッシュ効率 ↑)
- ▸
.dockerignoreでnode_modulesや.gitを除外する - ▸マルチステージビルド — ビルドツールを除外して小さいイメージを作成
- ▸Alpine ベース (5 MB) を優先し、互換性の問題がある場合は distroless にフォールバック
Docker Compose — ローカル開発環境をまとめて立ち上げる
単一コンテナの限界
コマンド5本 + 手動ネットワーク接続 — 複雑でミスが起きやすい。
docker-compose.yml — 1ファイルで完結
3つのコンテナ + ネットワーク + ボリューム がコマンド1行で起動します。
自動ネットワーク
Compose はすべてのサービスを1つのネットワークにまとめます。サービス名がホスト名になります:
localhost ではなくサービス名を使います。古い --link 方式よりもシンプルです。
環境変数 — .env の自動読み込み
compose up を実行すると自動的に .env を読み込んで値を展開します。.env を .gitignore に追加することを忘れずに。
volumes — データの永続化
コンテナを削除してもデータは保持されます。down では削除されず、down -v を明示した場合のみ削除されます。
healthcheck + depends_on (モダンな方法)
depends_on だけでは「起動順序」しか保証されません — DB が実際に接続を受け付ける準備ができているかは保証されません。healthcheck との組み合わせが標準的な方法です。
プロダクションでは Compose 単体は使いません
- ▸Compose はローカル・開発環境のスタンダード
- ▸プロダクションは Kubernetes、ECS、Cloud Run など
- ▸Compose ファイルをそのまま Kubernetes マニフェストに変換するツール (Kompose) もあります
🤖 AI へのリクエスト例
- ▸「PostgreSQL + Redis + Node.js アプリが一緒に起動する docker-compose.yml を作って」
- ▸「この compose ファイルに healthcheck と depends_on の条件付き起動を追加して」
- ▸「環境変数を .env ファイルに分離して」
先に読むとよい概念: DevOps