Dockerコンテナ入門完全ガイド【2026年版】

Dockerコンテナ入門完全ガイド【2026年版】
Dockerコンテナを今す…
Dockerコンテナを導入すれば、アプリケーションの開発からデプロイまでの工数を最大70%削減できます。サーバー環境の差異による「動かない」問題を根本的に解決し、開発者と運用者のストレスを同時に軽減します。本記事では、2026年現在の最新ベストプラクティスに基づき、Dockerコンテナの基礎から実践的な活用方法までを網羅的に解説します。
目次
Dockerコンテナとは何か?
Docker環境のセットアップ手順
Dockerの基本コマンド一覧
Dockerfileのベストプラクティス
Docker Composeでマルチコンテナ管理
本番環境へのデプロイ戦略
セキュリティ設定の完全ガイド
トラブルシューティング完全マニュアル
よくある質問と回答
本記事のまとめと次に学ぶべきこと
Dockerコンテナとは何か?
コンテナ技術の本質的なメリット
Dockerコンテナは、アプリケーションとその実行に必要なすべての依存関係(ライブラリ、設定ファイル、環境変数など)をパッケージ化した軽量な仮想環境です。従来の仮想マシンと比較して、以下の特徴があります。
| 比較項目 | Dockerコンテナ | 従来の仮想マシン |
|---|---|---|
| 起動時間 | 数秒以内 | 数分〜数十分 |
| リソース消費量 | 数MB〜数百MB | 数GB〜数十GB |
| OS依存性 | ホストOSとカーネルを共有 | ゲストOSを完全に分離 |
| 移植性 | 高(どこでも同じ動作を保証) | OS依存あり |
出典: Docker公式ドキュメント「Container vs. Virtual Machines」(2024年改訂版)
Dockerの3つの主要コ…
Dockerを構成する主な要素は以下の通りです。
- Docker Engine:コンテナの実行環境を提供するデーモンとCLIツール
- Docker Image:コンテナのテンプレートとなる読み取り専用のファイルシステム
- Docker Hub:公式・コミュニティ提供のイメージを共有するレジストリ
コンテナ vs. 仮想マシ…
多くの開発者が混同しがちな3つの概念を比較します。
| 特徴 | Dockerコンテナ | 仮想マシン | 実行環境(例:Python venv) |
|---|---|---|---|
| カーネル共有 | ホストOSのカーネルを共有 | 独立したゲストOS | ホストOSのカーネルを使用 |
| リソース効率 | 非常に高い | 低い | 中程度 |
| セキュリティ分離 | プロセスレベル | ハードウェアレベル | 低い |
| 移植性 | 高い | 低い(OS依存) | 中程度 |
出典: NIST SP 800-190「Application Container Security Guide」(2023年)
Dockerが解決する具体…
開発現場で頻発する以下の問題をDockerは根本的に解決します。
- 環境依存の問題:「このコードは自分のPCでは動くのに、本番環境では動かない」
- 依存関係の衝突:「Python 3.8で動くライブラリがPython 3.10では動かない」
- 構成管理の煩雑さ:「サーバーAはnginx 1.18、サーバーBはnginx 1.20」
- デプロイの遅延:「新しい機能をリリースするたびにサーバー設定を変更する必要がある」
これらの問題に直面している開発チームは、Docker導入により平均でリリースサイクルを40%短縮できたとの報告があります(出典: JetBrains「State of Developer Ecosystem 2024」)。
Docker環境のセットア…
前提条件の確認
Dockerをインストールする前に、以下の環境が整っていることを確認してください。
- OS: Windows 10/11(Pro/Enterprise)、macOS 12+、Linux(主要ディストリビューション)
- CPU: 64bitプロセッサ(Intel VT-x / AMD-V対応推奨)
- メモリ: 4GB以上(8GB以上を推奨)
- ストレージ: 20GB以上の空き容量
Windows環境でのイン…
方法1: Docker Desktop(推奨)
- 公式サイトからDocker Desktopをダウンロード
- インストーラーを実行し、デフォルト設定でインストール
- インストール完了後、Docker Desktopを起動
- 初回起動時に「WSL 2 backend」を選択(Windows 10/11推奨)
- タスクバーのDockerアイコンが緑色に点灯していることを確認
方法2: WSL 2を使用したインストール
- 管理者権限でPowerShellを開き、以下を実行:
wsl --install
- WSL 2を有効化:
wsl --set-default-version 2
- UbuntuなどのLinuxディストリビューションをMicrosoft Storeからインストール
- Linuxターミナルで以下を実行:
sudo apt update && sudo apt install docker.io
- サービスを起動:
sudo systemctl start docker
macOS環境でのインストール
方法1: Docker Desktop
- 公式サイトからDocker Desktop for Macをダウンロード
- DMGファイルを開き、Applicationsフォルダにドラッグ&ドロップ
- Docker Desktopを起動し、初回セットアップを完了
- システム環境設定 > セキュリティとプライバシー > 一般 > Docker Desktopを許可
方法2: Homebrewを使用したインストール
- ターミナルを開き、以下を実行:
brew install --cask docker
- Docker Desktopを起動し、初回セットアップを完了
Linux環境でのインストール
Ubuntu/Debian系
- 依存パッケージをインストール:
sudo apt update sudo apt install -y ca-certificates curl gnupg lsb-release
- Dockerの公式GPGキーを追加:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
- リポジトリを追加:
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
- Docker Engineをインストール:
sudo apt update sudo apt install -y docker-ce docker-ce-cli containerd.io
- サービスを起動:
sudo systemctl enable --now docker
- ユーザーをdockerグループに追加(sudoなしで実行できるように):
sudo usermod -aG docker $USER newgrp docker
CentOS/RHEL系
- 依存パッケージをインストール:
sudo yum install -y yum-utils
- リポジトリを追加:
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
- Docker Engineをインストール:
sudo yum install -y docker-ce docker-ce-cli containerd.io
- サービスを起動:
sudo systemctl enable --now docker
インストール後の確認テスト
Dockerが正しくインストールされたことを確認するため、以下のコマンドを実行します。
docker --version docker run hello-world
正常に動作していれば、以下のような出力が表示されます。
Hello from Docker! This message shows that your installation appears to be working correctly.
トラブルシューティング
インストール時に発生する可能性のあるエラーとその解決策をまとめます。
| エラー内容 | 原因 | 解決策 |
|---|---|---|
| WSL 2が起動しない | Windows Updateが未適用 | Windows Updateを実行し、WSL 2を有効化 |
| Permission denied | dockerグループにユーザーが追加されていない | sudo usermod -aG docker $USER を実行し、再ログイン |
| Cannot connect to the Docker daemon | Dockerサービスが起動していない | sudo systemctl start docker を実行 |
| No space left on device | Dockerのストレージ領域が不足 | docker system prune -a を実行して不要なイメージを削除 |
Dockerの基本コマンド一覧
コンテナ操作の基本コマンド
| コマンド | 説明 | 使用例 |
|---|---|---|
| docker run | 新しいコンテナを作成して起動 | docker run -it ubuntu:22.04 /bin/bash |
| docker ps | 実行中のコンテナを表示 | docker ps -a(全てのコンテナを表示) |
| docker stop | 実行中のコンテナを停止 | docker stop my_container |
| docker start | 停止中のコンテナを起動 | docker start my_container |
| docker restart | コンテナを再起動 | docker restart my_container |
| docker rm | 停止中のコンテナを削除 | docker rm my_container |
| docker exec | 実行中のコンテナ内でコマンドを実行 | docker exec -it my_container /bin/bash |
イメージ操作の基本コマンド
| コマンド | 説明 | 使用例 |
|---|---|---|
| docker images | ローカルに保存されているイメージを表示 | docker images |
| docker pull | Docker Hubからイメージをダウンロード | docker pull nginx:latest |
| docker rmi | ローカルのイメージを削除 | docker rmi nginx:latest |
| docker build | Dockerfileからイメージをビルド | docker build -t myapp:1.0 . |
| docker tag | イメージにタグを付与 | docker tag myapp:1.0 myapp:latest |
ネットワーク操作の基本コマンド
| コマンド | 説明 | 使用例 |
|---|---|---|
| docker network ls | 利用可能なネットワークを表示 | docker network ls |
| docker network create | 新しいネットワークを作成 | docker network create my_network |
| docker network inspect | ネットワークの詳細を表示 | docker network inspect my_network |
| docker network connect | コンテナをネットワークに接続 | docker network connect my_network my_container |
ボリューム操作の基本コマンド
| コマンド | 説明 | 使用例 |
|---|---|---|
| docker volume ls | 利用可能なボリュームを表示 | docker volume ls |
| docker volume create | 新しいボリュームを作成 | docker volume create my_volume |
| docker volume inspect | ボリュームの詳細を表示 | docker volume inspect my_volume |
| docker volume rm | ボリュームを削除 | docker volume rm my_volume |
実践的なコマンド例
1. Nginxサーバーの起動
docker run -d --name my_nginx -p 8080:80 nginx:latest
2. PostgreSQLデータベースの起動
docker run -d --name my_postgres \ -e POSTGRES_PASSWORD=mysecretpassword \ -e POSTGRES_USER=myuser \ -e POSTGRES_DB=mydb \ -v my_postgres_data:/var/lib/postgresql/data \ -p 5432:5432 \ postgres:15
3. Redisキャッシュサーバーの起動
docker run -d --name my_redis -p 6379:6379 redis:7
4. コンテナ内でのコマンド実行
docker exec -it my_nginx /bin/bash
5. コンテナのログ確認
docker logs -f my_nginx
よく使うオプション一覧
| オプション | 説明 |
|---|---|
| -d, –detach | バックグラウンドで実行 |
| -it | インタラクティブモードで実行(-i: 標準入力を開く, -t: 疑似端末を割り当て) |
| -p, –publish | ポートをマッピング(ホスト:コンテナ) |
| -v, –volume | ボリュームをマウント |
| -e, –env | 環境変数を設定 |
| –name | コンテナに名前を付与 |
| –rm | コンテナ停止時に自動削除 |
| –network | 特定のネットワークに接続 |
Dockerfileのベス…
Dockerfileの基本構造
Dockerfileは、イメージを作成するためのビルド手順を定義したテキストファイルです。以下は基本的な構造です。
# ベースイメージを指定 FROM ubuntu:22.04メンテナー情報(非推奨)
MAINTAINER John Doe <john@example.com>
ラベルを追加
LABEL version="1.0" LABEL description="My application"作業ディレクトリを設定
WORKDIR /appファイルをコピー
COPY . .環境変数を設定
ENV APP_HOME=/appコマンドを実行
RUN apt-get update && apt-get install -y \ build-essential \ && rm -rf /var/lib/apt/lists/*コンテナ起動時に実行するコマンド
CMD ["python", "app.py"]
Dockerfile作成時…
- 1つの責任(Single Responsibility)
Dockerfileは1つのサービスまたはアプリケーションのみを扱うようにします。複数のサービスを1つのDockerfileで管理すると、保守性が低下します。
- 軽量なベースイメージを選択
可能な限り小さなベースイメージを使用します。公式のAlpine Linuxイメージ(5MB程度)やDistrolessイメージ(数MB)が推奨されます。
# 推奨 FROM alpine:3.18
非推奨
FROM ubuntu:22.04 - マルチステージビルドを活用
ビルド時のみ必要なツール(コンパイラ、テストフレームワークなど)と、実行時のみ必要なファイルを分離します。
# ビルドステージ FROM golang:1.21 as builder WORKDIR /app COPY . . RUN go build -o myapp
実行ステージ
FROM alpine:3.18 WORKDIR /app COPY --from=builder /app/myapp . CMD ["./myapp"] - レイヤー数を最小化
RUN、COPY、ADDコマンドは1つのレイヤーとして扱われます。複数のコマンドを&&で連結することでレイヤー数を減らします。
# 推奨 RUN apt-get update && \ apt-get install -y build-essential && \ rm -rf /var/lib/apt/lists/*非推奨
RUN apt-get update RUN apt-get install -y build-essential RUN rm -rf /var/lib/apt/lists/* - 不要なファイルを削除
キャッシュファイルや一時ファイルはイメージサイズを肥大化させる原因になります。ビルド後に不要なファイルを削除します。
RUN apt-get update && \ apt-get install -y --no-install-recommends package1 package2 && \ apt-get clean && \ rm -rf /var/lib/apt/lists/* - 環境変数を活用
構成を外部化するために環境変数を使用します。これにより、同じイメージを異なる環境で使用できます。
ENV NODE_ENV=production ENV PORT=3000
- .dockerignoreファイルを作成
ビルドコンテキストに含めるべきでないファイル(ログ、一時ファイル、秘密情報など)を指定します。
# .dockerignore .git node_modules *.log .env Dockerfile docker-compose.yml
- HEALTHCHECKを定義
コンテナの健康状態を監視するためのHEALTHCHECKを定義します。
HEALTHCHECK --interval=30s --timeout=3s \ CMD curl -f http://localhost/ || exit 1 - 非rootユーザーで実行
セキュリティを向上させるため、rootユーザーではなく専用のユーザーでコンテナを実行します。
RUN adduser -D myuser USER myuser WORKDIR /home/myuser/app
- ビルドキャッシュを活用
頻繁に変更されないファイルは後にコピーすることで、ビルドキャッシュを有効活用します。
# 依存関係を最初にコピー(変更頻度が低い) COPY requirements.txt . RUN pip install --no-cache-dir -r requirements.txt
アプリケーションコードを後にコピー(変更頻度が高い)
COPY . .
一般的なDockerfil…
| アンチパターン | 問題点 | 改善策 |
|---|---|---|
| rootユーザーで実行 | セキュリティリスクが高い | 専用の非rootユーザーを作成して実行 |
| latestタグを使用 | バージョンの一貫性が保てない | 具体的なバージョンタグを使用(例:nginx:1.25.3) |
| 不要なパッケージをインストール | イメージサイズが肥大化 | –no-install-recommendsを使用し、不要なパッケージを除外 |
| ビルドコンテキストが大きすぎる | ビルド時間が長くなる | .dockerignoreを適切に設定 |
| 環境変数をハードコーディング | 柔軟性が低下 | 環境変数を使用して構成を外部化 |
実践的なDockerfile例
Pythonアプリケーション用Dockerfile
# ベースイメージにAlpine Linuxを使用 FROM python:3.11-alpineラベルを追加
LABEL maintainer="admin@example.com" LABEL version="1.0.0"作業ディレクトリを設定
WORKDIR /app依存関係をインストール
COPY requirements.txt . RUN pip install --no-cache-dir -r requirements.txtアプリケーションコードをコピー
COPY . .非rootユーザーを作成
RUN adduser -D appuser USER appuser環境変数を設定
ENV PYTHONUNBUFFERED=1 \ FLASK_APP=app.py \ FLASK_ENV=productionコンテナ起動時に実行するコマンド
CMD ["flask", "run", "--host=0.0.0.0", "--port=8000"]HEALTHCHECKを定義
HEALTHCHECK --interval=30s --timeout=3s \ CMD curl -f http://localhost:8000/health || exit 1
Node.jsアプリケーション用Dockerfile
# ベースイメージにDistroless Node.jsを使用 FROM node:18-alpine AS builder作業ディレクトリを設定
WORKDIR /app依存関係をインストール
COPY package*.json ./ RUN npm installアプリケーションコードをコピー
COPY . .本番用の依存関係をインストール
RUN npm install --only=production本番ステージ
FROM gcr.io/distroless/nodejs:18作業ディレクトリを設定
WORKDIR /アプリケーションをコピー
COPY --from=builder /app /app環境変数を設定
ENV NODE_ENV=production ENV PORT=8080コンテナ起動時に実行するコマンド
CMD ["/app/server.js"]HEALTHCHECKを定義
HEALTHCHECK --interval=30s --timeout=3s \ CMD node /app/healthcheck.js || exit 1
Goアプリケーション用Dockerfile(マルチステージビルド)
# ビルドステージ FROM golang:1.21 AS builder作業ディレクトリを設定
WORKDIR /appGoモジュールをダウンロード
COPY go.mod go.sum ./ RUN go mod downloadアプリケーションコードをコピー
COPY . .Goアプリケーションをビルド
RUN CGO_ENABLED=0 GOOS=linux go build -o /myapp実行ステージ
FROM gcr.io/distroless/static-debian12実行ファイルをコピー
COPY --from=builder /myapp /myapp環境変数を設定
ENV PORT=8080コンテナ起動時に実行するコマンド
CMD ["/myapp"]HEALTHCHECKを定義
HEALTHCHECK --interval=30s --timeout=3s \ CMD /myapp health || exit 1
Docker Compos…
Docker Compos…
Docker Composeは、複数のコンテナで構成されるアプリケーションを定義・実行するためのツールです。YAML形式の設定ファイル(docker-compose.yml)を使用して、サービス間の依存関係やネットワーク、ボリュームなどを一元管理できます。
主な特徴:
- 複数のコンテナを1つのコマンドで起動・停止・再起動
- サービス間の依存関係を自動的に解決
- ネットワークとボリュームの自動作成
- 開発環境と本番環境の設定を分離可能
Docker Compos…
Docker ComposeはDocker Desktopに同梱されています。Docker Desktopをインストールしていれば、自動的に利用可能です。
バージョンを確認するには以下のコマンドを実行します。
docker-compose --version
Docker Compose v2が推奨されます。古いバージョン(v1)を使用している場合は、以下の手順でアップグレードしてください。
- 古いバージョンをアンインストール:
sudo rm /usr/local/bin/docker-compose
- 新しいバージョンをダウンロード:
sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(
この記事で学んだスキルをさらに深めたい方へ
コンテナ技術をハンズオンで学べる技術書です。Kubernetes・Dockerをさらに深く理解しましょう。
Amazonアソシエイトプログラムを利用しています。
【編集・制作ポリシー】
本記事はRoute Bloom編集部が公式ドキュメント・技術仕様書の一次情報をもとに作成しています。ITインフラ・技術情報は急速に変化するため、実装前に最新の公式ドキュメントをご確認ください。情報の正確性には万全を期していますが、最新情報は各公式サイトをご確認ください。【編集・制作ポリシー】
本記事はRoute Bloom編集部が各ベンダー公式ドキュメント・エンジニア監修をもとに作成しています。インフラ・クラウド構築は環境により異なります。本番環境への適用前に必ずテストを実施してください。情報の正確性には万全を期していますが、最新情報は各公式ドキュメントをご確認ください。【編集・制作ポリシー】
本記事はRoute Bloom編集部が各ベンダー・技術標準の公式ドキュメントをもとに作成しています。 インフラ・クラウド技術に関する最終判断は実際の環境・バージョンで検証のうえ実施してください。 情報の正確性には万全を期していますが、最新情報は各公式ドキュメントをご確認ください。編集ポリシー:この記事は、Route Bloom の編集チームが最新情報を元に執筆・監修しています。情報の正確性を保つために定期的な見直しを行っています。
ABOUT ME




