Contents
Docker の基礎
| 用語 | 意味 | 主なコマンド例 |
|---|---|---|
| イメージ | 実行可能なファイルシステムのスナップショット。Docker Hub やプライベートレジストリに保存される。 | docker pull nginx:latest |
| コンテナ | イメージから起動した実行中プロセス。軽量で起動が数秒。 | docker run -d -p 8080:80 nginx |
| Docker Engine | Docker の本体(デーモン)。Linux カーネルの cgroups と namespace を利用してコンテナを隔離する。 | docker info |
| Docker Compose | 複数コンテナの定義・起動を YAML ファイルで管理できるツール。開発環境で頻繁に使われる。 | docker compose up -d |
Docker は「イメージを作成 → コンテナとして実行」までをローカルで完結させられる点が最大の魅力です。
基本的な操作フロー
- Dockerfile を書く
docker build -t myapp:1.0 .でイメージ作成docker run --name app -p 8080:80 myapp:1.0でコンテナ起動- 必要に応じて Docker Hub や社内レジストリへ
docker push
Dockerfile とビルドの基本手順
最小構成例
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
# ベースイメージ(公式イメージを推奨) FROM node:20-alpine # 作業ディレクトリ作成 WORKDIR /app # 依存関係だけ先にコピーしてキャッシュ活用 COPY package*.json ./ RUN npm ci --only=production # アプリ本体のコードをコピー COPY . . # コンテナ起動時に実行するコマンド CMD ["node", "index.js"] |
ポイント解説
FROMで公式イメージを指定すると脆弱性情報が追跡しやすい。WORKDIRは以降のCOPYやRUNの作業ディレクトリになるので必ず設定する。- キャッシュ活用:依存ファイルだけ先にコピーして
npm ciを走らせると、コード変更時でも再ビルドが速くなる。
ビルドコマンド例
|
1 2 3 |
# コンテキストは現在のディレクトリ(.) docker build -t example/app:latest . |
Tip:Docker Desktop や Docker Engine に組み込まれている BuildKit はデフォルトで有効です。
--progress=plainを付与するとビルドログが見やすくなります。
ローカル環境でのデバッグ・リソース管理
コンテナの状態確認
| コマンド | 説明 |
|---|---|
docker ps -a |
起動中・停止中を含む全コンテナ一覧 |
docker logs <名前/ID> |
標準出力・標準エラーのログ取得 |
docker inspect <名前/ID> |
詳細情報(設定、ネットワーク、ボリューム)を JSON で表示 |
リソース使用量の可視化
|
1 2 3 |
# CPU とメモリのリアルタイム統計 docker stats --no-trunc |
--format "{{.Name}}\t{{.CPUPerc}}\t{{.MemUsage}}"で出力を整形できる。- ローカルで負荷テストしたいときは
docker run --cpus=1.5 --memory=512m …のように リソース上限 を明示すると、実際の本番環境に近い条件で検証できる。
ボリュームで永続化
|
1 2 3 4 5 |
docker run -d \ --name db \ -v pgdata:/var/lib/postgresql/data \ postgres:15 |
pgdataは Docker が管理する名前付きボリューム。コンテナ削除後もデータは保持される。
Kubernetes とは何か(初心者向け概要)
| 用語 | 説明 |
|---|---|
| Pod | 1 つ以上のコンテナとその共有ストレージ・ネットワークをまとめた最小単位。 |
| Deployment | Pod の宣言的な管理(ロールアウト、ロールバック)を行うコントローラ。 |
| Service | Pod に対する永続的な IP と DNS 名を提供し、ロードバランシングも担う。 |
| Namespace | 複数チームや環境ごとにリソースを分離できる論理領域。 |
Kubernetes は「Docker で作ったイメージ」を大規模クラスター上で自動配置・スケールさせるオーケストレーション基盤です。Docker がローカル開発を支えるのに対し、Kubernetes は本番環境での信頼性と拡張性を提供します。
簡単なマニフェスト例(Deployment + Service)
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
apiVersion: apps/v1 kind: Deployment metadata: name: web-app spec: replicas: 3 # 初期レプリカ数 selector: matchLabels: app: web template: metadata: labels: app: web spec: containers: - name: nginx image: nginx:latest ports: - containerPort: 80 --- apiVersion: v1 kind: Service metadata: name: web-svc spec: selector: app: web ports: - protocol: TCP port: 80 # クラスタ内部でのポート targetPort: 80 # コンテナ側ポート type: LoadBalancer # 外部からアクセスできるようにする(クラウドプロバイダー依存) |
replicasを増やすだけで水平スケールが可能。- 本番環境では Horizontal Pod Autoscaler (HPA) を利用して CPU 使用率に応じた自動伸縮を設定できる(※Kubernetes 1.27 以降の標準機能)。
Docker イメージと Kubernetes の連携例
- Dockerfile →
docker build -t registry.example.com/myapp:1.0 . - イメージプッシュ
bash
docker push registry.example.com/myapp:1.0 - Kubernetes マニフェストに参照(上記 Deployment の
image:部分を書き換える) - kubectl apply -f deployment.yaml でデプロイ
この流れは CI/CD パイプラインでも同様に自動化でき、GitHub Actions + Docker BuildKit → OCI レジストリ → Argo CD での継続的デリバリーが一般的です。
移行・運用チェックリスト
| カテゴリ | 確認項目 | 推奨ツール/設定 |
|---|---|---|
| イメージ管理 | イメージの署名とスキャン | Docker Content Trust、Trivy |
| セキュリティ | Seccomp/AppArmor プロファイル適用 | runtimeClassName + カスタムプロファイル |
| CI/CD 連携 | ビルド → テスト → デプロイの自動化 | GitHub Actions, Argo CD |
| 監視・可観測性 | メトリクス、ログ、トレースの統合収集 | Prometheus + Grafana、OpenTelemetry Collector |
| リソース設計 | requests/limits の適切設定と QoS 判定 |
kubectl top pod で実測を確認 |
| バックアップ | etcd スナップショットとレジストリミラー | Velero、Harbor ミラーレジストリ |
ポイント:Docker だけでも開発は完結しますが、本番環境の可用性・スケールを考えるなら上記項目を順に導入していくとスムーズです。
参考リンク(公式ドキュメント)
- Docker Engine & BuildKit – https://docs.docker.com/engine/
- Dockerfile のベストプラクティス – https://docs.docker.com/develop/develop-images/dockerfile_best-practices/
- Docker Compose (v2) – https://docs.docker.com/compose/
- Kubernetes 公式ドキュメント – https://kubernetes.io/docs/home/
- Deployment の作成方法 – https://kubernetes.io/docs/concepts/workloads/controllers/deployment/
- Horizontal Pod Autoscaler – https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale/
まとめ
- Docker は「イメージ作成・ローカル実行」の入口。
docker build、docker run、docker composeをマスターすれば、開発環境はすぐに整います。 - Kubernetes はそのイメージを大規模クラスター上で安全かつ自動的に運用するためのプラットフォーム。基本オブジェクト(Pod・Deployment・Service)とリソース設定さえ理解できれば、シンプルなマイクロサービスでも本番レベルの可用性を実現できます。
- 移行 は「Dockerfile → イメージ → レジストリ → Kubernetes マニフェスト」の流れで段階的に進め、チェックリストに沿ってセキュリティ・監視・バックアップを整えていくのがベストプラクティスです。
このガイドが Docker と Kubernetes の入門者の学習ロードマップになることを願っています。 🚀