なぜDockerが必要なのか

「自分の環境では動くのに本番では動かない」という問題は、エンジニアなら誰もが経験します。Dockerはアプリケーションと実行環境をまとめてパッケージ化することで、この問題を解決します。

コンテナとVMの違い

比較項目 VM Docker
起動時間 分単位 秒単位
リソース消費
ポータビリティ
OSの扱い 完全なOS ホストOS共有

コンテナはOSカーネルを共有するため、軽量かつ高速です。

基本的なDockerコマンド

# イメージの取得と実行
docker pull nginx
docker run -d -p 80:80 nginx

# コンテナ管理
docker ps           # 実行中コンテナ一覧
docker stop [ID]    # 停止
docker rm [ID]      # 削除
docker images       # イメージ一覧

Dockerfileの書き方

FROM python:3.11-slim

WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt

COPY . .
EXPOSE 8000
CMD ["uvicorn", "main:app", "--host", "0.0.0.0"]

Docker Composeで複数サービスを管理

version: '3.8'
services:
  web:
    build: .
    ports:
      - "8000:8000"
    depends_on:
      - db
  db:
    image: postgres:15
    environment:
      POSTGRES_PASSWORD: secret
    volumes:
      - pgdata:/var/lib/postgresql/data

volumes:
  pgdata:
docker compose up -d    # バックグラウンド起動
docker compose down     # 停止・削除
docker compose logs -f  # ログ確認

よくあるユースケース

  • 開発環境の統一:チーム全員が同じ環境で開発
  • CI/CDパイプライン:テスト・ビルドをコンテナで実行
  • マイクロサービス:各サービスを独立したコンテナで運用
  • 本番デプロイ:Kubernetes連携でスケーラブルな運用

Dockerをマスターすることでインフラへの理解が深まり、DevOpsエンジニアへの道が開けます。