近年のWeb開発において、Dockerはもはや「知っていると便利」から「知らないと仕事にならない」必須スキルになりました。コンテナ技術の理解はバックエンド・インフラはもちろん、フロントエンドエンジニアにとっても重要です。
本記事では、Dockerを全く知らない初心者から「なんとなく使っているが仕組みが理解できていない」中級者まで、Dockerの基礎から本番環境での活用法までを体系的に解説します。
Dockerとは?コンテナ技術の基本
Dockerとは、アプリケーションとその実行環境を「コンテナ」という独立した単位にパッケージ化するプラットフォームです。
従来の開発では「自分のPCでは動くのに本番環境で動かない」という問題が頻繁に発生していました。Dockerを使うと、開発環境・テスト環境・本番環境を完全に同一の状態に保つことができます。
仮想マシン(VM)とDockerの違い
| 比較項目 | 仮想マシン(VM) | Docker(コンテナ) |
|---|---|---|
| 起動時間 | 数分かかる | 数秒(高速) |
| リソース消費 | 重い(OSごと仮想化) | 軽い(ホストOSを共有) |
| ポータビリティ | 低い | 高い(どこでも動く) |
| 構築の複雑さ | 比較的複雑 | シンプル(Dockerfileで管理) |
Docker インストール手順
macOS へのインストール
Docker Desktopを公式サイト(docker.com)からダウンロードしてインストールするだけです。
# インストール確認
docker --version
docker compose version
Ubuntu/Debian へのインストール
# リポジトリのセットアップ
sudo apt-get update
sudo apt-get install 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 install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
Dockerの基本コマンド
イメージ操作
# イメージの取得
docker pull nginx:latest
# イメージ一覧表示
docker images
# イメージの削除
docker rmi nginx:latest
コンテナ操作
# コンテナを起動(フォアグラウンド)
docker run nginx
# バックグラウンドで起動 + ポートマッピング
docker run -d -p 8080:80 --name my-nginx nginx
# 実行中コンテナの確認
docker ps
# すべてのコンテナを確認(停止中も含む)
docker ps -a
# コンテナの停止・削除
docker stop my-nginx
docker rm my-nginx
Dockerfileの書き方
DockerfileはDockerイメージを構築するための設計書です。以下はNode.jsアプリケーションのDockerfileの例です。
# ベースイメージ
FROM node:20-alpine
# 作業ディレクトリの設定
WORKDIR /app
# 依存関係のインストール(キャッシュ活用)
COPY package*.json ./
RUN npm ci --only=production
# アプリケーションのコピー
COPY . .
# ポートの公開
EXPOSE 3000
# 起動コマンド
CMD ["node", "index.js"]
Docker Compose:複数コンテナの管理
実際のWebアプリ開発では、Webサーバー・アプリサーバー・DBなど複数のコンテナを連携させます。Docker Composeを使うと、これらをdocker-compose.yml一つで管理できます。
version: '3.9'
services:
app:
build: .
ports:
- "3000:3000"
environment:
- DATABASE_URL=postgres://user:password@db:5432/mydb
depends_on:
- db
db:
image: postgres:16
environment:
POSTGRES_USER: user
POSTGRES_PASSWORD: password
POSTGRES_DB: mydb
volumes:
- postgres_data:/var/lib/postgresql/data
volumes:
postgres_data:
# 起動
docker compose up -d
# ログ確認
docker compose logs -f
# 停止
docker compose down
本番環境でのDockerベストプラクティス
- マルチステージビルドでイメージサイズを最小化
- rootユーザーで実行しない(セキュリティ対策)
- .dockerignoreで不要なファイルをビルドから除外
- ヘルスチェックを設定してコンテナの死活監視
- イメージは公式イメージまたはAlpine/Distrolessベースを使用
まとめ:Dockerをマスターして開発効率を上げよう
Dockerは学習コストが比較的低い一方で、習得することでの恩恵は計り知れません。環境の再現性・開発速度・チーム協力の効率化など、あらゆる面で開発体験を向上させてくれます。
本記事で基礎を理解したら、次はKubernetesを使った本格的なコンテナオーケストレーションにも挑戦してみてください。