Welcome to Tech Athletes | テック・アスリート   Click to listen highlighted text! Welcome to Tech Athletes | テック・アスリート

【2026年完全版】Docker・Docker Compose実践ガイド|インストールからKubernetes連携まで現場エンジニアが徹底解説

Dockerはコンテナ型仮想化技術であり、2026年の現場では事実上の標準インフラとなっています。本記事では、Dockerの基礎から本番環境での活用まで、実際のコマンドとdocker-compose.ymlを交えて解説します。

Dockerとは?仮想マシンとの違いを図解で解説

Dockerは「コンテナ」という軽量な実行環境を作成・管理するプラットフォームです。従来の仮想マシン(VM)と比較して、起動が速く、リソース消費が少ないという大きなメリットがあります。

  • 仮想マシン(VM):OSごと仮想化。起動に数分かかり、GBレベルのメモリを消費
  • Dockerコンテナ:カーネルを共有し、必要なものだけを分離。秒単位で起動、MBレベルの消費

Dockerのインストール(Mac/Windows/Linux)

# macOS (Homebrew)
brew install --cask docker

# Ubuntu/Debian Linux
sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

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

Dockerの基本コマンド完全チートシート

# イメージ操作
docker pull nginx:latest         # イメージをダウンロード
docker images                    # イメージ一覧表示
docker rmi nginx:latest          # イメージを削除
docker build -t myapp:1.0 .      # Dockerfileからイメージをビルド

# コンテナ操作
docker run -d -p 8080:80 --name webserver nginx   # バックグラウンドで起動
docker run -it ubuntu bash        # インタラクティブモードで起動
docker ps                        # 実行中コンテナ一覧
docker ps -a                     # 全コンテナ一覧(停止含む)
docker stop webserver            # コンテナを停止
docker start webserver           # コンテナを起動
docker restart webserver         # コンテナを再起動
docker rm webserver              # コンテナを削除
docker exec -it webserver bash   # 実行中コンテナに接続

# ログとモニタリング
docker logs webserver            # コンテナのログを表示
docker logs -f webserver         # ログをリアルタイム表示
docker stats                     # リソース使用状況
docker inspect webserver         # コンテナの詳細情報

Dockerfileのベストプラクティス

本番環境で使えるDockerfileの書き方を、Node.jsアプリを例に解説します。

# Node.js本番環境向けDockerfile(マルチステージビルド)

# ===== ビルドステージ =====
FROM node:20-alpine AS builder

WORKDIR /app

# package.jsonを先にコピー(レイヤーキャッシュ活用)
COPY package*.json ./
RUN npm ci --only=production

# ソースコードをコピー
COPY . .
RUN npm run build

# ===== 本番ステージ =====
FROM node:20-alpine AS production

# セキュリティ: root以外のユーザーで実行
RUN addgroup -g 1001 -S nodejs && adduser -S nextjs -u 1001

WORKDIR /app

# ビルド成果物のみコピー
COPY --from=builder --chown=nextjs:nodejs /app/dist ./dist
COPY --from=builder --chown=nextjs:nodejs /app/node_modules ./node_modules
COPY --from=builder /app/package.json ./

USER nextjs

EXPOSE 3000

ENV NODE_ENV=production
ENV PORT=3000

HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3   CMD curl -f http://localhost:3000/health || exit 1

CMD ["node", "dist/index.js"]

Docker Compose完全ガイド

Docker Composeを使えば、複数コンテナの管理が劇的に楽になります。Webアプリ・DB・RedisをComposeで管理する実践例を紹介します。

# docker-compose.yml(本番環境向け)
version: '3.8'

services:
  # Webアプリケーション
  app:
    build:
      context: .
      dockerfile: Dockerfile
      target: production
    restart: unless-stopped
    ports:
      - "3000:3000"
    environment:
      - NODE_ENV=production
      - DATABASE_URL=postgresql://user:password@db:5432/mydb
      - REDIS_URL=redis://redis:6379
    depends_on:
      db:
        condition: service_healthy
      redis:
        condition: service_started
    networks:
      - app-network

  # PostgreSQL
  db:
    image: postgres:16-alpine
    restart: unless-stopped
    environment:
      POSTGRES_USER: user
      POSTGRES_PASSWORD: password
      POSTGRES_DB: mydb
    volumes:
      - postgres_data:/var/lib/postgresql/data
      - ./init.sql:/docker-entrypoint-initdb.d/init.sql
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U user -d mydb"]
      interval: 10s
      timeout: 5s
      retries: 5
    networks:
      - app-network

  # Redis(セッション管理・キャッシュ)
  redis:
    image: redis:7-alpine
    restart: unless-stopped
    command: redis-server --maxmemory 256mb --maxmemory-policy allkeys-lru
    volumes:
      - redis_data:/data
    networks:
      - app-network

  # Nginx(リバースプロキシ)
  nginx:
    image: nginx:alpine
    restart: unless-stopped
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./nginx/nginx.conf:/etc/nginx/nginx.conf:ro
      - ./certbot/conf:/etc/letsencrypt:ro
    depends_on:
      - app
    networks:
      - app-network

volumes:
  postgres_data:
  redis_data:

networks:
  app-network:
    driver: bridge
# Docker Composeの主要コマンド
docker compose up -d              # バックグラウンドで起動
docker compose down               # 停止してコンテナ削除
docker compose down -v            # ボリュームも削除
docker compose ps                 # サービスの状態確認
docker compose logs -f app        # appサービスのログ追跡
docker compose exec app bash      # appコンテナに接続
docker compose build --no-cache   # キャッシュなしでビルド
docker compose pull               # 全イメージを最新に更新
docker compose scale app=3        # appを3台にスケール

DockerとKubernetesの連携

本番環境では、DockerコンテナをKubernetes(K8s)で管理するのが主流です。ローカル開発環境でK8sを試す方法を紹介します。

# minikubeでローカルK8s環境
brew install minikube
minikube start --driver=docker

# Dockerイメージをminikubeで使う
eval $(minikube docker-env)
docker build -t myapp:latest .

# Kubernetes Deployment作成
kubectl create deployment myapp --image=myapp:latest
kubectl expose deployment myapp --port=3000 --type=NodePort
minikube service myapp --url

まとめ:Dockerスキルでキャリアアップ

Dockerは現代のバックエンド・インフラエンジニアにとって必須スキルです。本記事で紹介した内容をマスターすれば、求人市場での価値が大幅に上がります。次のステップとしては、Kubernetes・Terraform・GitLab CI/CDへの学習をおすすめします。

投稿者 kasata

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

コメントを残す

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

Click to listen highlighted text!