Dockerはモダンなソフトウェア開発に欠かせないコンテナ技術です。本記事では、Docker初心者から中級者向けに、基礎概念から実践的な使い方まで体系的に解説します。
Dockerとは?コンテナ技術の基礎
Dockerは、アプリケーションとその依存関係を「コンテナ」という軽量な実行環境にパッケージ化するプラットフォームです。従来の仮想マシン(VM)とは異なり、ホストOSのカーネルを共有するため、起動が速く、リソース効率が高いのが特徴です。
Dockerの主要コンポーネント
- Dockerイメージ:アプリケーションの実行環境を定義した読み取り専用のテンプレート
- Dockerコンテナ:イメージから作成された実行中のインスタンス
- Dockerfile:イメージを構築するための設定ファイル
- Docker Hub:イメージを公開・共有するクラウドレジストリ
- docker-compose:複数コンテナを定義・管理するツール
Dockerのインストール方法(Mac・Windows・Linux対応)
Mac(Apple Silicon / Intel)
公式サイト(Docker Desktop)からインストーラーをダウンロードするのが最も簡単です。Apple SiliconとIntel両対応版が提供されています。
# Homebrewを使ったインストール(推奨)
brew install --cask docker
# インストール確認
docker --version
docker compose version
Ubuntu / Debian系Linux
# 必要パッケージのインストール
sudo apt-get update
sudo apt-get install -y ca-certificates curl gnupg
# DockerのGPGキーを追加
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
# リポジトリの追加してインストール
sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
# sudo なしで使えるようにする
sudo usermod -aG docker $USER
Dockerの基本コマンド一覧
| コマンド | 説明 |
|---|---|
docker pull [image] | イメージをダウンロード |
docker run [image] | コンテナを起動 |
docker ps | 実行中のコンテナ一覧 |
docker ps -a | 全コンテナ一覧(停止含む) |
docker stop [id] | コンテナを停止 |
docker rm [id] | コンテナを削除 |
docker images | イメージ一覧 |
docker rmi [image] | イメージを削除 |
docker build -t [name] . | Dockerfileからイメージをビルド |
docker logs [id] | コンテナのログを表示 |
docker exec -it [id] bash | 実行中コンテナに接続 |
Dockerfileの書き方:本番環境でも使える実践サンプル
DockerfileはDockerイメージの設計図です。Node.jsアプリケーションを例に、本番環境でも使える実践的なDockerfileの書き方を紹介します。
# ベースイメージ(軽量なAlpine版を使用)
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
WORKDIR /app
COPY --from=builder /app/node_modules ./node_modules
COPY --from=builder /app/dist ./dist
# セキュリティ:root以外のユーザーで実行
RUN addgroup -g 1001 -S nodejs && adduser -S nextjs -u 1001
USER nextjs
EXPOSE 3000
CMD ["node", "dist/index.js"]
docker-composeで複数コンテナを管理する
本番のWebアプリは通常、Webサーバー・アプリケーション・データベースなど複数のサービスで構成されます。docker-composeを使うと、これらを一括管理できます。
version: '3.8'
services:
app:
build:
context: .
dockerfile: Dockerfile
ports:
- "3000:3000"
environment:
- DATABASE_URL=postgresql://user:password@db:5432/mydb
- REDIS_URL=redis://redis:6379
depends_on:
db:
condition: service_healthy
restart: unless-stopped
db:
image: postgres:16-alpine
environment:
POSTGRES_USER: user
POSTGRES_PASSWORD: password
POSTGRES_DB: mydb
volumes:
- postgres_data:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U user -d mydb"]
interval: 10s
timeout: 5s
retries: 5
restart: unless-stopped
redis:
image: redis:7-alpine
volumes:
- redis_data:/data
restart: unless-stopped
nginx:
image: nginx:alpine
ports:
- "80:80"
- "443:443"
volumes:
- ./nginx/nginx.conf:/etc/nginx/nginx.conf
depends_on:
- app
restart: unless-stopped
volumes:
postgres_data:
redis_data:
Dockerのベストプラクティス10選
- マルチステージビルドを使う:ビルド用と実行用でイメージを分けてサイズを削減
- 軽量なベースイメージを選ぶ:alpine系を使うことで数十MBに抑えられる
- .dockerignoreを設定する:不要なファイルのコピーを防ぐ
- root以外のユーザーで実行する:セキュリティリスクを最小化
- レイヤーキャッシュを活用する:変更頻度の低いものから順にCOPYする
- ヘルスチェックを設定する:コンテナの動作状態を監視できる
- シークレットは環境変数で管理:Docker Secretsの活用
- ログはstdout/stderrに出力:Dockerのログ管理機能を活用
- イメージにはタグを明示する:latestは使わず具体的なバージョンを指定
- 定期的にイメージを更新する:セキュリティパッチを適用
Docker関連おすすめツール・サービス
- Portainer:GUIでDockerコンテナを管理できるWebUI(無料プランあり)
- Lazydocker:ターミナル上でDockerを管理するTUIツール
- Dive:Dockerイメージのレイヤー構造を解析するツール
- Trivy:コンテナイメージの脆弱性スキャナー(AquaSecurity製)
- Docker Scout:Docker公式の脆弱性スキャン・分析ツール
まとめ:DockerはエンジニアのMust-Haveスキル
Dockerは現代のソフトウェア開発において欠かせないスキルとなっています。「自分のマシンでは動くのに本番で動かない」という問題を根本から解決し、開発・テスト・本番環境の一致を保証します。
本記事で紹介した内容をマスターすれば、就職・転職活動でも大きなアドバンテージになります。まずはdocker runで既存のイメージを動かすことから始め、徐々にDockerfile作成、docker-compose活用へとステップアップしていきましょう。
DockerをマスターしたらKubernetes(K8s)へと進むのがエンジニアとしての王道ルートです。ぜひチャレンジしてみてください!