【2026年版】Docker・Docker Compose完全入門|コンテナ技術でモダン開発環境を構築する

DockerはコンテナベースでアプリケーションをパッケージングするOSSです。「自分のMacでは動くのに本番では動かない」という開発環境の差異問題を解消し、どの環境でも同一の実行環境を再現できます。本記事ではDocker初心者向けに基礎から実践まで丁寧に解説します。

Dockerとは何か?仮想マシン(VM)との違い

Dockerコンテナは仮想マシンと異なり、ホストOSのカーネルを共有します。そのため起動が高速(秒単位)でオーバーヘッドが少ないのが特徴です。

  • 仮想マシン(VM):独立したゲストOSを持つ→重い・起動が遅い
  • Dockerコンテナ:OSカーネルを共有→軽量・起動が速い(数秒)

Dockerのインストール

# macOS
brew install --cask docker
# Docker Desktopのアプリを起動する

# Ubuntu
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
sudo usermod -aG docker $USER  # sudoなしで使えるように

# インストール確認
docker --version  # Docker version 26.x.x
docker compose version  # Docker Compose version v2.x.x

Dockerfile:イメージの作成

# Pythonアプリのマルチステージビルド
FROM python:3.12-slim AS builder

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

FROM python:3.12-slim

# セキュリティ:非rootユーザーで実行
RUN useradd -m -u 1001 appuser

WORKDIR /app
COPY --from=builder /root/.local /home/appuser/.local
COPY --chown=appuser:appuser . .

USER appuser
ENV PATH=/home/appuser/.local/bin:$PATH

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

Docker Compose:複数コンテナの管理

# docker-compose.yml(Next.js + Node.js API + PostgreSQL + Redis)
version: '3.9'

services:
  # フロントエンド
  frontend:
    build:
      context: ./frontend
      dockerfile: Dockerfile
    ports:
      - "3000:3000"
    environment:
      - API_URL=http://api:8000
    depends_on:
      - api

  # バックエンドAPI
  api:
    build: ./api
    ports:
      - "8000:8000"
    environment:
      - DATABASE_URL=postgresql://postgres:password@db:5432/myapp
      - REDIS_URL=redis://cache:6379
    depends_on:
      db:
        condition: service_healthy
      cache:
        condition: service_started

  # PostgreSQL
  db:
    image: postgres:16-alpine
    volumes:
      - postgres_data:/var/lib/postgresql/data
    environment:
      POSTGRES_DB: myapp
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: password
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U postgres"]
      interval: 5s
      timeout: 5s
      retries: 5

  # Redis(キャッシュ・セッション)
  cache:
    image: redis:7-alpine
    command: redis-server --appendonly yes
    volumes:
      - redis_data:/data

volumes:
  postgres_data:
  redis_data:

よく使うDockerコマンド一覧

# イメージのビルド
docker build -t myapp:latest .

# コンテナの起動(バックグラウンド)
docker run -d -p 8000:8000 --name myapp myapp:latest

# コンテナの一覧
docker ps        # 起動中
docker ps -a     # すべて

# コンテナへのシェル接続
docker exec -it myapp /bin/bash

# ログの確認
docker logs -f myapp

# リソース使用量確認
docker stats

# Docker Compose(開発環境一括起動)
docker compose up -d          # バックグラウンドで起動
docker compose logs -f        # ログ追跡
docker compose down           # 停止・削除
docker compose down -v        # ボリュームも削除

本番環境でのDockerベストプラクティス

  • マルチステージビルド:イメージサイズを最小化
  • 非rootユーザーで実行:セキュリティリスクの低減
  • .dockerignoreの活用:node_modules・.gitなどを除外
  • ヘルスチェックの設定:コンテナの稼働状況を自動監視
  • distrolessイメージの利用:攻撃面を最小化
  • シークレットはenv fileや.secretsで管理:docker-compose.ymlにパスワードを書かない

まとめ

DockerとDocker Composeを習得することで、環境構築の時間を大幅に削減し、チーム全員が同一の開発環境で作業できるようになります。まずは既存プロジェクトのDockerfile作成から始めてみましょう。

投稿者 kasata

IT企業でエンジニアとして勤務後、テクノロジー情報メディア「Tech Athletes(テック・アスリート)」を運営。プログラミング、クラウドインフラ(AWS/GCP/Azure)、AI活用、Webサービス開発を専門とする。エンジニア・ビジネスパーソン向けに、実際に使ってみた経験をもとに信頼できる技術情報を発信中。資格:AWS認定ソリューションアーキテクト、Python 3 エンジニア認定試験合格。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です