【2026年版】DockerとKubernetesの完全入門ガイド|コンテナ技術をゼロから学ぶ実践ハンズオン

DockerとKubernetesとは?なぜ今コンテナが重要なのか

現代のソフトウェア開発において、DockerKubernetes(K8s)は欠かせない技術スタックとなっています。2026年現在、クラウドネイティブな開発スタイルが主流となり、エンジニアとしてこれらの技術を習得することは、キャリアアップにおいても非常に重要です。

この記事では、完全な初心者でもDockerとKubernetesを理解できるよう、基礎から実践まで段階的に解説します。実際にコマンドを叩きながら学べるハンズオン形式で進めていきます。

この記事で学べること

  • Dockerの基本概念(コンテナ・イメージ・Dockerfile)
  • Docker Composeを使ったマルチコンテナ環境の構築
  • Kubernetesの基本アーキテクチャとコンポーネント
  • 実践的なKubernetesデプロイメント手順
  • 本番環境で役立つベストプラクティス

Dockerとは?コンテナ技術の基礎を理解する

Dockerは、アプリケーションをコンテナと呼ばれる軽量な仮想環境でパッケージ化し、どこでも同じ環境で実行できるようにするプラットフォームです。

仮想マシン(VM)との違い

従来の仮想マシン(VM)と比較したコンテナのメリットを以下の表にまとめます。

項目仮想マシン(VM)Dockerコンテナ
起動時間数分数秒
リソース消費大(GBオーダー)小(MBオーダー)
OS各VMに独立したOSホストOSを共有
移植性低い高い
スケーリング遅い高速

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

インストール方法(macOS・Windows・Linux)

Docker公式サイトから「Docker Desktop」をダウンロードしてインストールするのが最も簡単です。

# インストール確認
docker --version
docker info

# Hello Worldコンテナの実行
docker run hello-world

# イメージ一覧表示
docker images

# コンテナ一覧(実行中)
docker ps

# コンテナ一覧(全て)
docker ps -a

Dockerfileの作成と独自イメージのビルド

Dockerfileは、Dockerイメージを作成するための設計書です。以下はNode.jsアプリケーションのDockerfileの例です。

# Dockerfile
FROM node:20-alpine

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

# 依存関係のコピーとインストール
COPY package*.json ./
RUN npm ci --only=production

# アプリケーションのコピー
COPY . .

# ポートの公開
EXPOSE 3000

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

# コンテナの起動(バックグラウンド)
docker run -d -p 3000:3000 --name myapp myapp:1.0

# ログの確認
docker logs myapp

# コンテナ内でコマンド実行
docker exec -it myapp sh

# コンテナの停止・削除
docker stop myapp
docker rm myapp

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

Docker Composeを使うと、複数のコンテナ(例:Webアプリ+DB+Redis)を一つの設定ファイルで管理できます。

# docker-compose.yml
version: '3.8'

services:
  web:
    build: .
    ports:
      - "3000:3000"
    environment:
      - NODE_ENV=production
      - DATABASE_URL=postgresql://user:password@db:5432/mydb
    depends_on:
      - db
      - redis

  db:
    image: postgres:16-alpine
    environment:
      POSTGRES_USER: user
      POSTGRES_PASSWORD: password
      POSTGRES_DB: mydb
    volumes:
      - postgres_data:/var/lib/postgresql/data

  redis:
    image: redis:7-alpine
    ports:
      - "6379:6379"

volumes:
  postgres_data:
# Docker Compose の主要コマンド
docker compose up -d        # 全サービスを起動
docker compose down         # 全サービスを停止・削除
docker compose logs -f web  # ログをフォロー
docker compose ps           # サービス一覧
docker compose exec web sh  # コンテナ内でシェル起動

Kubernetesとは?オーケストレーションの基礎

Kubernetes(K8s)は、Googleが開発したコンテナオーケストレーションプラットフォームです。大規模なコンテナ化されたアプリケーションの自動デプロイ、スケーリング、管理を行います。

Kubernetesの主要コンポーネント

  • Pod:最小のデプロイ単位。1つ以上のコンテナを含む
  • Deployment:Podのレプリカ数管理とローリングアップデート
  • Service:Podへのネットワークアクセスを提供
  • Ingress:外部からのHTTPルーティング
  • ConfigMap / Secret:設定値と機密情報の管理
  • Namespace:リソースの論理的な分離

基本的なKubernetesマニフェストの書き方

# deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: myapp-deployment
  labels:
    app: myapp
spec:
  replicas: 3
  selector:
    matchLabels:
      app: myapp
  template:
    metadata:
      labels:
        app: myapp
    spec:
      containers:
      - name: myapp
        image: myapp:1.0
        ports:
        - containerPort: 3000
        resources:
          requests:
            memory: "128Mi"
            cpu: "250m"
          limits:
            memory: "256Mi"
            cpu: "500m"
        livenessProbe:
          httpGet:
            path: /health
            port: 3000
          initialDelaySeconds: 30
          periodSeconds: 10
# service.yaml
apiVersion: v1
kind: Service
metadata:
  name: myapp-service
spec:
  selector:
    app: myapp
  ports:
  - protocol: TCP
    port: 80
    targetPort: 3000
  type: ClusterIP

kubectlコマンドチートシート

# よく使うkubectlコマンド

# クラスター情報
kubectl cluster-info
kubectl get nodes

# リソースの確認
kubectl get pods -n default
kubectl get deployments
kubectl get services

# マニフェストの適用
kubectl apply -f deployment.yaml
kubectl apply -f service.yaml

# ログの確認
kubectl logs pod-name -f
kubectl logs -l app=myapp --tail=100

# デバッグ
kubectl describe pod pod-name
kubectl exec -it pod-name -- /bin/sh

# スケーリング
kubectl scale deployment myapp-deployment --replicas=5

# ローリングアップデート
kubectl set image deployment/myapp-deployment myapp=myapp:2.0
kubectl rollout status deployment/myapp-deployment
kubectl rollout undo deployment/myapp-deployment  # ロールバック

# 削除
kubectl delete -f deployment.yaml

本番環境でのベストプラクティス

1. セキュリティ強化

  • rootユーザーを使わない:DockerfileでUSER命令を使い非rootユーザーで実行
  • イメージのスキャン:Trivyなどのツールで脆弱性を定期的にチェック
  • Secretの適切な管理:環境変数でなくKubernetes Secretまたは外部シークレット管理ツールを使用
  • ネットワークポリシー:Pod間の通信を必要最小限に制限

2. パフォーマンス最適化

  • マルチステージビルド:最終イメージのサイズを最小化
  • リソース制限の設定:requestsとlimitsを必ず設定する
  • HorizontalPodAutoscaler:負荷に応じた自動スケーリング
  • 読み取り専用ファイルシステムreadOnlyRootFilesystem: trueの設定

3. 監視・ロギング

  • Prometheus + Grafana:メトリクス収集と可視化
  • EFK/ELK Stack:ログの一元管理
  • Jaeger:分散トレーシング
  • Alertmanager:アラート通知の設定

おすすめの学習リソース

DockerとKubernetesをさらに深く学びたい方には、以下のリソースを強くおすすめします。

書籍・オンライン講座

  • Udemy「Docker & Kubernetes: The Practical Guide」:英語ですが最も体系的で実践的
  • 「仕組みと使い方がわかる Docker&Kubernetesのきほんのきほん」:日本語の入門書として最適
  • Kubernetes公式ドキュメント:最新情報はここが一番
  • Play with Docker:ブラウザ上でDockerを試せる無料環境

まとめ:コンテナ技術をマスターしてキャリアを加速しよう

DockerとKubernetesは、現代のクラウドネイティブ開発において必須のスキルです。本記事で学んだ内容を振り返ります。

  • ✅ Dockerはアプリをコンテナ化し、環境差異をなくす技術
  • ✅ Docker Composeで複数コンテナを簡単に管理できる
  • ✅ Kubernetesは本番規模でのコンテナオーケストレーションに最適
  • ✅ セキュリティと監視の設定が本番運用では必須

まずはDockerのインストールから始めて、小さなアプリのコンテナ化を試してみてください。実際に手を動かすことが、コンテナ技術習得への最短ルートです。


関連記事もぜひチェックしてください:

投稿者 kasata

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

コメントを残す

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