Dockerはコンテナ技術の代名詞として、現代のソフトウェア開発・運用に欠かせないツールです。この記事では、Dockerの基本概念からインストール、実践的なコマンド、本番環境での運用まで、エンジニアが知るべきすべてを網羅的に解説します。
Dockerとは?コンテナ技術の基礎知識
Dockerは2013年にDotCloud社(現Docker社)が公開したオープンソースのコンテナプラットフォームです。従来の仮想マシン(VM)と異なり、OSカーネルを共有するため、起動が高速で軽量なのが特徴です。
コンテナとVMの違い
- 仮想マシン(VM):ハイパーバイザー上にゲストOSを完全に再現。起動に数分かかり、数GBのディスクを使用
- Dockerコンテナ:ホストOSのカーネルを共有。起動が数秒で、数MBから数百MBと軽量
Dockerの主なメリット
- ✅ 環境の一貫性:「自分の環境では動いた」問題を解消
- ✅ 高速デプロイ:コンテナイメージをそのまま本番へ
- ✅ スケーラビリティ:Kubernetes連携で自動スケール
- ✅ マイクロサービス対応:サービスごとに独立したコンテナを管理
Dockerのインストール方法【2026年版】
macOSへのインストール
Docker Desktop for Macを使用するのが最も簡単です。公式サイトからインストーラーをダウンロードしてインストールするだけです。Apple SiliconとIntel Macの両方に対応しています。
# インストール確認
docker --version
docker-compose --version
# Dockerデーモンの起動確認
docker info
Ubuntuへのインストール
# パッケージの更新
sudo apt-get update
# Dockerエンジンのインストール
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
# sudo不要でDockerを使用するための設定
sudo usermod -aG docker $USER
Dockerの基本コマンド完全リファレンス
イメージ操作コマンド
# イメージの取得
docker pull nginx:latest
docker pull node:20-alpine
# ローカルイメージの一覧表示
docker images
# イメージの削除
docker rmi nginx:latest
# 使用していないイメージをすべて削除
docker image prune -a
コンテナ操作コマンド
# コンテナの起動(バックグラウンド)
docker run -d --name my-nginx -p 8080:80 nginx:latest
# コンテナの起動(インタラクティブモード)
docker run -it --name my-ubuntu ubuntu:22.04 /bin/bash
# 実行中のコンテナ一覧
docker ps
# コンテナの停止と削除
docker stop my-nginx && docker rm my-nginx
# 実行中のコンテナに接続
docker exec -it my-nginx /bin/bash
# コンテナのログ確認
docker logs -f my-nginx
# コンテナのリソース使用状況
docker stats
Dockerfile の書き方|実践サンプル付き
Dockerfileはイメージを作成するための設計図です。以下にNode.jsアプリケーションのDockerfileサンプルを示します。
# ベースイメージ(軽量なAlpineを使用)
FROM node:20-alpine
# 作業ディレクトリの設定
WORKDIR /app
# 依存関係ファイルをコピー
COPY package*.json ./
# 依存関係のインストール
RUN npm ci --only=production
# ソースコードをコピー
COPY . .
# ビルド
RUN npm run build
# 非rootユーザーで実行(セキュリティのベストプラクティス)
USER node
# ポートの公開
EXPOSE 3000
# アプリケーションの起動
CMD ["node", "dist/server.js"]
マルチステージビルドでイメージを軽量化
# ビルドステージ
FROM node:20-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build
# 本番ステージ(ビルドファイルのみをコピー)
FROM node:20-alpine AS production
WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production
COPY --from=builder /app/dist ./dist
USER node
EXPOSE 3000
CMD ["node", "dist/server.js"]
Docker Compose で複数コンテナを管理
Docker Composeを使うと、複数のコンテナをYAMLファイルで一元管理できます。以下はNext.js + PostgreSQL + Redisの構成例です。
version: '3.8'
services:
app:
build:
context: .
target: production
ports:
- "3000:3000"
environment:
- DATABASE_URL=postgresql://postgres:password@db:5432/myapp
- REDIS_URL=redis://redis:6379
depends_on:
db:
condition: service_healthy
db:
image: postgres:16-alpine
environment:
- POSTGRES_DB=myapp
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=password
volumes:
- postgres_data:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U postgres"]
interval: 10s
timeout: 5s
retries: 5
redis:
image: redis:7-alpine
volumes:
- redis_data:/data
volumes:
postgres_data:
redis_data:
# Docker Composeの基本コマンド
docker compose up -d # バックグラウンドで起動
docker compose down # コンテナの停止・削除
docker compose logs -f app # ログの確認
docker compose exec app bash # コンテナに接続
本番環境でのDockerベストプラクティス
- 🔒 非rootユーザーで実行:セキュリティリスクを最小化
- 📦 軽量ベースイメージを使用:alpine系でイメージサイズを削減
- 🏗️ マルチステージビルド:本番イメージからビルドツールを除外
- 🔑 シークレット管理:環境変数やDocker Secretsを活用
- 📊 ヘルスチェックの設定:コンテナの健全性を自動監視
- 🗄️ 名前付きボリューム使用:データの永続化を確実に
- 📝 .dockerignoreの設定:不要ファイルをイメージに含めない
まとめ:Dockerをマスターしてクラウドネイティブな開発へ
Dockerは現代のソフトウェアエンジニアにとって必須スキルです。この記事で紹介した内容をベースに、実際にハンズオンで練習することをおすすめします。次のステップとしては、Kubernetes入門、CI/CDパイプラインへの統合、AWS ECS/EKSでの本番デプロイなどに挑戦してみましょう。