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を構成する主な要素は以下の通りです。

  1. Docker Engine:コンテナの実行環境を提供するデーモンとCLIツール
  2. Docker Image:コンテナのテンプレートとなる読み取り専用のファイルシステム
  3. 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(推奨)

  1. 公式サイトからDocker Desktopをダウンロード
  2. インストーラーを実行し、デフォルト設定でインストール
  3. インストール完了後、Docker Desktopを起動
  4. 初回起動時に「WSL 2 backend」を選択(Windows 10/11推奨)
  5. タスクバーのDockerアイコンが緑色に点灯していることを確認

方法2: WSL 2を使用したインストール

  1. 管理者権限でPowerShellを開き、以下を実行:
    wsl --install
  2. WSL 2を有効化:
    wsl --set-default-version 2
  3. UbuntuなどのLinuxディストリビューションをMicrosoft Storeからインストール
  4. Linuxターミナルで以下を実行:
    sudo apt update && sudo apt install docker.io
  5. サービスを起動:
    sudo systemctl start docker

macOS環境でのインストール

方法1: Docker Desktop

  1. 公式サイトからDocker Desktop for Macをダウンロード
  2. DMGファイルを開き、Applicationsフォルダにドラッグ&ドロップ
  3. Docker Desktopを起動し、初回セットアップを完了
  4. システム環境設定 > セキュリティとプライバシー > 一般 > Docker Desktopを許可

方法2: Homebrewを使用したインストール

  1. ターミナルを開き、以下を実行:
    brew install --cask docker
  2. Docker Desktopを起動し、初回セットアップを完了

Linux環境でのインストール

Ubuntu/Debian系

  1. 依存パッケージをインストール:
    sudo apt update
    sudo apt install -y ca-certificates curl gnupg lsb-release
  2. Dockerの公式GPGキーを追加:
    curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
  3. リポジトリを追加:
    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
  4. Docker Engineをインストール:
    sudo apt update
    sudo apt install -y docker-ce docker-ce-cli containerd.io
  5. サービスを起動:
    sudo systemctl enable --now docker
  6. ユーザーをdockerグループに追加(sudoなしで実行できるように):
    sudo usermod -aG docker $USER
    newgrp docker

CentOS/RHEL系

  1. 依存パッケージをインストール:
    sudo yum install -y yum-utils
  2. リポジトリを追加:
    sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
  3. Docker Engineをインストール:
    sudo yum install -y docker-ce docker-ce-cli containerd.io
  4. サービスを起動:
    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 denieddockerグループにユーザーが追加されていないsudo usermod -aG docker $USER を実行し、再ログイン
Cannot connect to the Docker daemonDockerサービスが起動していないsudo systemctl start docker を実行
No space left on deviceDockerのストレージ領域が不足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 pullDocker Hubからイメージをダウンロードdocker pull nginx:latest
docker rmiローカルのイメージを削除docker rmi nginx:latest
docker buildDockerfileからイメージをビルド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. 1つの責任(Single Responsibility)

    Dockerfileは1つのサービスまたはアプリケーションのみを扱うようにします。複数のサービスを1つのDockerfileで管理すると、保守性が低下します。

  2. 軽量なベースイメージを選択

    可能な限り小さなベースイメージを使用します。公式のAlpine Linuxイメージ(5MB程度)やDistrolessイメージ(数MB)が推奨されます。

    # 推奨
    FROM alpine:3.18
    
    

    非推奨

    FROM ubuntu:22.04
  3. マルチステージビルドを活用

    ビルド時のみ必要なツール(コンパイラ、テストフレームワークなど)と、実行時のみ必要なファイルを分離します。

    # ビルドステージ
    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"]
  4. レイヤー数を最小化

    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/*
  5. 不要なファイルを削除

    キャッシュファイルや一時ファイルはイメージサイズを肥大化させる原因になります。ビルド後に不要なファイルを削除します。

    RUN apt-get update && \
        apt-get install -y --no-install-recommends package1 package2 && \
        apt-get clean && \
        rm -rf /var/lib/apt/lists/*
  6. 環境変数を活用

    構成を外部化するために環境変数を使用します。これにより、同じイメージを異なる環境で使用できます。

    ENV NODE_ENV=production
    ENV PORT=3000
  7. .dockerignoreファイルを作成

    ビルドコンテキストに含めるべきでないファイル(ログ、一時ファイル、秘密情報など)を指定します。

    # .dockerignore
    .git
    node_modules
    *.log
    .env
    Dockerfile
    docker-compose.yml
  8. HEALTHCHECKを定義

    コンテナの健康状態を監視するためのHEALTHCHECKを定義します。

    HEALTHCHECK --interval=30s --timeout=3s \
        CMD curl -f http://localhost/ || exit 1
  9. 非rootユーザーで実行

    セキュリティを向上させるため、rootユーザーではなく専用のユーザーでコンテナを実行します。

    RUN adduser -D myuser
    USER myuser
    WORKDIR /home/myuser/app
  10. ビルドキャッシュを活用

    頻繁に変更されないファイルは後にコピーすることで、ビルドキャッシュを有効活用します。

    # 依存関係を最初にコピー(変更頻度が低い)
    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 /app

Goモジュールをダウンロード

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)を使用している場合は、以下の手順でアップグレードしてください。

  1. 古いバージョンをアンインストール:
    sudo rm /usr/local/bin/docker-compose
  2. 新しいバージョンをダウンロード:
    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
    たから
    サラリーマンをしながら開業して経営やってます。 今年、本業で独立・別事業を起業予定です。 ◆経験:IT講師/インフラエンジニア/PM/マネジメント/採用/運用・保守・構築・設計 ◆取得資格:CCNA/CCNP/LPIC-1/AZ-900/FE/サーティファイC言語 ◆サイドビジネス:アパレル事業/複数のWEBメディアを運営