kubenetesやdockerにおけるvolumの有意義な使い方

julien-tromeur-EOSHmMbjT8g-unsplash.jpg

質問

kubenetesやdockerにおけるvolumの有意義な使い方、一般的な使い方を教えてください。


解答

とても良い質問です。
Kubernetes や Docker における Volume(ボリューム) は、コンテナ運用の基盤となる概念であり、「データの永続化」と「共有」を実現する重要な仕組みです。

以下で、

  1. 基本的な考え方

  2. 有意義な使い方(実務での利用例)

  3. 一般的なパターン

  4. KubernetesとDockerの違い
    を順に整理して説明します。


1. Volumeとは何か(基本的な考え方)

コンテナの特性

コンテナは「一時的な実行環境」であり、
停止・削除すると中のデータもすべて消えます

→ そのため、アプリの設定・ログ・データベースなどを
コンテナ外に保存して永続化する仕組みが必要になります。

そのための機能が Volume(ボリューム) です。


2. 有意義な使い方(実務上の活用例)

(1) データの永続化

目的: コンテナを再起動・再デプロイしてもデータを保持する。

例:

  • MySQL / PostgreSQL のデータディレクトリを Volume に保存

  • Webアプリのアップロードファイル(画像など)を Volume に格納

docker run -d \  -v /var/lib/mysql:/var/lib/mysql \  mysql:8

→ コンテナ削除後も /var/lib/mysql にデータが残ります。


(2) コンテナ間のデータ共有

目的: 複数コンテナで同じデータを扱う。

例:

  • Webコンテナ(Nginx)とアプリコンテナ(Flask)が同じ静的ファイルを参照

  • Jenkins が Docker ソケットやビルド成果物を共有

docker run -v shared-data:/data app1docker run -v shared-data:/data app2

→ 同一ボリュームをマウントしてファイルを共有します。


(3) 設定ファイル・証明書の分離管理

目的: セキュアに設定ファイルを注入。

例:

  • SSL証明書をVolumeでマウント

  • アプリの設定ファイルをコンテナ外に置く

docker run -v /etc/nginx/conf:/etc/nginx/conf nginx

→ 機密情報をコンテナイメージに含めない(セキュリティ向上)。


(4) 開発環境でのホットリロード

目的: ソースコード変更をすぐ反映させる。

例:

  • -v $(pwd):/app のようにローカルソースを共有

docker run -v $(pwd):/usr/src/app node:18 npm start

→ コード変更が即時コンテナ内に反映され、効率的に開発できます。


3. 一般的なVolumeの使い方パターン

目的パターン主な設定方法
データ永続化コンテナ外に保存hostPath, persistentVolumeClaim, docker volume create
コンテナ間共有共通ボリュームをマウント同一 Volume 名を使用
設定注入ConfigMap, Secret, bind mountkubectl apply -f config.yaml
キャッシュ一時ボリューム(emptyDir)Kubernetes: emptyDir
テスト・CI/CD一時的データ保存ephemeral volume(K8s 1.25+)

4. KubernetesとDockerでの違い

比較項目DockerKubernetes
基本単位volume or bind mountVolumePersistentVolume (PV) / PersistentVolumeClaim (PVC)
管理範囲単一ホストクラスタ全体
永続化の範囲コンテナ停止までPod削除後も保持(PVC/PV)
設定方法docker run -v などCLIベースYAMLマニフェストで宣言的に設定
代表的なタイプbind, tmpfs, named volumehostPath, NFS, Ceph, EBS, GCE Persistent Disk, etc.

例(Kubernetes PVC使用例):

apiVersion: v1kind: PersistentVolumeClaimmetadata:  name: mysql-pvcspec:  accessModes:    - ReadWriteOnce  resources:    requests:      storage: 10Gi---apiVersion: apps/v1kind: Deploymentmetadata:  name: mysqlspec:  template:    spec:      containers:      - name: mysql        image: mysql:8        volumeMounts:        - name: mysql-data          mountPath: /var/lib/mysql      volumes:      - name: mysql-data        persistentVolumeClaim:          claimName: mysql-pvc

→ Podを再作成しても、データはPVCで永続化されます。


5. まとめ

観点意味・利点
永続化コンテナ削除後もデータ保持可能
共有複数コンテナ間でファイル共有
セキュリティ設定や証明書を安全に分離管理
柔軟性ストレージの種類を柔軟に選択(NFS, EBS, Cephなど)
運用性バックアップ、スケール、フェイルオーバーが容易


荒廃する日本 これでいいのかジャパン・インフラ [ インフラ再生研究会 ]

価格:2200円
(2025/11/17 20:27時点)
感想(0件)


P.O.Pプロダクツ ☆G_のぼり GNB-2068 オ米券新品/小物送料対象商品/テンポス

価格:1584円
(2025/11/13 20:05時点)
感想(0件)


 



この記事へのコメント

広告です。クリックいただけると励みになります。