Welcome to Tech Athletes | テック・アスリート   Click to listen highlighted text! Welcome to Tech Athletes | テック・アスリート

【2026年完全版】Docker・Kubernetes入門ガイド|コンテナ技術の基礎から本番運用まで徹底解説

DockerとKubernetesは現代のクラウドネイティブ開発に欠かせない技術です。本記事では、Docker・Kubernetesの基礎から実践的な運用まで、エンジニアが知っておくべき知識をすべて解説します。

Dockerとは?コンテナ技術の基礎

Dockerはアプリケーションとその依存関係をコンテナと呼ばれる隔離された環境にパッケージ化する技術です。「自分のPCでは動くのに本番環境では動かない」という問題を解決します。

Dockerの主要コンセプト

  • イメージ(Image):アプリと依存関係を含む読み取り専用のテンプレート
  • コンテナ(Container):イメージから生成される実行中のプロセス
  • Dockerfile:イメージを構築するための手順書
  • Docker Hub:公開されているDockerイメージのレジストリ
  • Docker Compose:複数コンテナを定義・実行するためのツール

Dockerのインストールと基本コマンド

# Dockerのインストール(Ubuntu)
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io

# バージョン確認
docker --version

# 基本コマンド
docker pull nginx:latest          # イメージを取得
docker images                     # ローカルイメージ一覧
docker run -d -p 8080:80 nginx   # コンテナ起動(バックグラウンド)
docker ps                         # 起動中のコンテナ一覧
docker ps -a                      # すべてのコンテナ一覧
docker stop         # コンテナ停止
docker rm           # コンテナ削除
docker rmi              # イメージ削除
docker logs         # ログ表示
docker exec -it  bash  # コンテナ内でシェル起動

Dockerfileの書き方

Dockerfileはイメージをビルドするための設計書です。Node.jsアプリを例に解説します。

# ベースイメージを指定
FROM node:20-alpine

# 作業ディレクトリの設定
WORKDIR /app

# package.jsonをコピー(キャッシュ最適化のため先にコピー)
COPY package*.json ./

# 依存パッケージのインストール
RUN npm ci --only=production

# アプリケーションのソースコードをコピー
COPY . .

# TypeScriptのビルド
RUN npm run build

# ポートを公開
EXPOSE 3000

# ヘルスチェック
HEALTHCHECK --interval=30s --timeout=3s --start-period=5s   CMD wget --quiet --tries=1 --spider http://localhost:3000/health || exit 1

# アプリケーションの起動
CMD ["node", "dist/index.js"]
# イメージのビルド
docker build -t my-node-app:1.0 .

# マルチステージビルド(本番向け軽量化)
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
EXPOSE 3000
CMD ["node", "dist/index.js"]

Docker Composeで複数コンテナを管理

実際のアプリケーションはWebサーバー、API、データベースなど複数のサービスで構成されます。Docker Composeを使うと、これらを一括管理できます。

# docker-compose.yml
version: '3.8'

services:
  app:
    build:
      context: .
      dockerfile: Dockerfile
    ports:
      - "3000:3000"
    environment:
      - NODE_ENV=production
      - DATABASE_URL=postgresql://postgres:password@db:5432/myapp
    depends_on:
      db:
        condition: service_healthy
    restart: unless-stopped

  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

  nginx:
    image: nginx:alpine
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf
      - ./ssl:/etc/nginx/ssl
    depends_on:
      - app

volumes:
  postgres_data:
# Docker Composeコマンド
docker compose up -d          # バックグラウンドで起動
docker compose down           # すべて停止・削除
docker compose ps             # ステータス確認
docker compose logs -f app    # ログをリアルタイム表示
docker compose exec app bash  # コンテナ内でコマンド実行
docker compose build --no-cache  # キャッシュなしでビルド

Kubernetes(K8s)の基礎

Kubernetesは複数のコンテナを本番環境で管理・スケールするためのオーケストレーションツールです。Googleが開発し、現在はCloud Native Computing Foundation(CNCF)がメンテナンスしています。

Kubernetesの主要コンポーネント

  • Pod:最小のデプロイ単位。1つ以上のコンテナをグループ化
  • Deployment:Podの望ましい状態を定義し、自動で維持
  • Service:Podへのネットワークアクセスを提供
  • ConfigMap:設定情報をコンテナから分離して管理
  • Secret:機密情報(パスワード、APIキー)を安全に管理
  • Ingress:外部からのHTTPトラフィックをルーティング
  • HorizontalPodAutoscaler:負荷に応じてPodを自動スケール

Kubernetesマニフェストの例

# deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-node-app
  labels:
    app: my-node-app
spec:
  replicas: 3
  selector:
    matchLabels:
      app: my-node-app
  template:
    metadata:
      labels:
        app: my-node-app
    spec:
      containers:
      - name: my-node-app
        image: my-registry/my-node-app:1.0
        ports:
        - containerPort: 3000
        resources:
          requests:
            memory: "128Mi"
            cpu: "100m"
          limits:
            memory: "256Mi"
            cpu: "500m"
        readinessProbe:
          httpGet:
            path: /health
            port: 3000
          initialDelaySeconds: 5
          periodSeconds: 10
        livenessProbe:
          httpGet:
            path: /health
            port: 3000
          initialDelaySeconds: 15
          periodSeconds: 20
        envFrom:
        - configMapRef:
            name: my-app-config
        - secretRef:
            name: my-app-secrets
---
apiVersion: v1
kind: Service
metadata:
  name: my-node-app-service
spec:
  selector:
    app: my-node-app
  ports:
  - port: 80
    targetPort: 3000
  type: ClusterIP
# kubectlコマンド基礎
kubectl apply -f deployment.yaml   # マニフェスト適用
kubectl get pods                   # Pod一覧
kubectl get deployments            # Deployment一覧
kubectl get services               # Service一覧
kubectl describe pod     # Pod詳細
kubectl logs             # ログ確認
kubectl exec -it  -- bash  # Pod内でシェル起動
kubectl scale deployment my-app --replicas=5  # スケール変更
kubectl rollout status deployment/my-app      # ロールアウト状態確認
kubectl rollout undo deployment/my-app        # ロールバック

AWS EKS・GKE・AKSの選び方

マネージドKubernetesサービスを利用することで、コントロールプレーンの運用を省力化できます。主要クラウドの特徴を比較します。

  • AWS EKS:AWSサービスとの統合が強力。ECR、ALB、IAMとシームレスに連携
  • Google GKE:Kubernetes本家のGoogleが提供。Autopilotモードで運用が簡単
  • Azure AKS:Azure ADとの統合、Windowsコンテナのサポートが強み

まとめ:Docker・Kubernetesの学習ロードマップ

Docker・Kubernetesはクラウドエンジニア・バックエンドエンジニアにとって必須スキルです。まずDockerの基礎(イメージ・コンテナ・Dockerfile)を習得し、次にDocker Composeで複数コンテナ構成を理解、そしてKubernetesの概念(Pod・Deployment・Service)へと進む学習順序が最も効果的です。

AWS認定資格(Solutions ArchitectやDevOps Engineer)やCKA(Certified Kubernetes Administrator)の取得を目指すことで、スキルの証明と市場価値向上に繋がります。クラウドエンジニアの年収は700万〜1,200万円以上に達するケースも多く、投資対効果の高いスキルです。

投稿者 kasata

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

コメントを残す

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

Click to listen highlighted text!