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への学習をおすすめします。