【2026年版】Docker完全入門ガイド|インストールから本番運用まで実践コマンドで徹底解説

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での本番デプロイなどに挑戦してみましょう。

投稿者 kasata

IT企業でエンジニアとして勤務後、テクノロジー情報メディア「Tech Athletes(テック・アスリート)」を運営。プログラミング、クラウドインフラ(AWS/GCP/Azure)、AI活用、Webサービス開発を専門とする。エンジニア・ビジネスパーソン向けに、実際に使ってみた経験をもとに信頼できる技術情報を発信中。資格:AWS認定ソリューションアーキテクト、Python 3 エンジニア認定試験合格。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です