この記事でわかること: Dockerの基本概念からインストール方法(Mac/Linux)、Dockerfile作成、Docker Compose、本番運用のベストプラクティスまで、エンジニアが現場で使える実践的なDockerの使い方を網羅的に解説します。
Dockerとは何か?仮想化との違いを理解する
Dockerは2013年に登場したコンテナ型の仮想化プラットフォームです。従来のVMware・VirtualBoxなどの仮想マシン(VM)と異なり、OSカーネルを共有するため、軽量・高速・ポータブルな環境構築が可能です。
| 比較項目 | 仮想マシン(VM) | Dockerコンテナ |
|---|---|---|
| 起動速度 | 数分 | 数秒 |
| ディスク使用量 | 数GB〜数十GB | 数MB〜数百MB |
| ポータビリティ | 低い | 非常に高い |
| 本番環境との一致性 | △ | ◎ |
Dockerのインストール方法(Mac / Linux)
Mac へのインストール
# Homebrewを使ったインストール(推奨)
brew install --cask docker
# インストール確認
docker --version
# Docker version 27.x.x, build xxxxxxx
Linux(Ubuntu)へのインストール
# 必要パッケージのインストール
sudo apt-get update
sudo apt-get install ca-certificates curl gnupg
# Dockerインストール
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
# sudoなしで実行可能にする
sudo usermod -aG docker $USER
Dockerの基本コマンド一覧
| コマンド | 説明 | 例 |
|---|---|---|
docker pull | イメージをダウンロード | docker pull nginx:latest |
docker run | コンテナを起動 | docker run -d -p 80:80 nginx |
docker ps | 起動中コンテナ一覧 | docker ps -a |
docker stop | コンテナを停止 | docker stop コンテナID |
docker exec | コンテナ内でコマンド実行 | docker exec -it コンテナID bash |
docker build | イメージをビルド | docker build -t myapp:1.0 . |
Dockerfileの書き方|マルチステージビルドのサンプル
# ビルドステージ
FROM node:20-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production
COPY . .
RUN npm run build
# 本番ステージ
FROM node:20-alpine AS production
RUN addgroup -g 1001 -S nodejs && adduser -S nextjs -u 1001
WORKDIR /app
COPY --from=builder --chown=nextjs:nodejs /app/.next ./.next
COPY --from=builder /app/node_modules ./node_modules
USER nextjs
EXPOSE 3000
CMD ["node_modules/.bin/next", "start"]
Docker Composeで複数コンテナを管理する
version: '3.8'
services:
app:
build: .
ports:
- "3000:3000"
depends_on:
- db
- cache
db:
image: postgres:16-alpine
environment:
POSTGRES_DB: mydb
POSTGRES_PASSWORD: password
volumes:
- postgres_data:/var/lib/postgresql/data
cache:
image: redis:7-alpine
volumes:
- redis_data:/data
volumes:
postgres_data:
redis_data:
本番環境でのDockerベストプラクティス
- 非rootユーザーで実行:セキュリティリスクを最小化するため、root以外のユーザーでプロセスを動かす
- イメージを最小化:alpine系の軽量イメージを使用し、不要なパッケージを含めない
- レイヤーキャッシュを活用:変更頻度の低いレイヤー(依存関係)を先に記述してビルドを高速化
- .dockerignoreを設定:node_modules、.gitなどをイメージに含めない
- ヘルスチェックを設定:コンテナの健全性を監視して自動回復できるようにする
まとめ
Dockerは現代のバックエンドエンジニア・インフラエンジニアにとって必須のスキルです。基本コマンド・Dockerfile・Docker Composeをマスターして、本番環境での活用を目指しましょう。次のステップとしてKubernetes(K8s)への移行も検討してみてください。