mcpField
D
docker-storage

docker-storage

github.com/full-stack-skillsクラウド・DevOps3106 回インストール4 週間前に更新
リポジトリ

docker-storage について

docker-storageは、Dockerのデータ永続化を設定する開発者や運用担当者向けのガイダンススキルです。ボリューム、バインドマウント、tmpfs、データベースの構成、バックアップ、ストレージドライバーを実用的なコマンドとともに説明します。

主な機能

  1. 01ボリューム、バインドマウント、tmpfsの比較
  2. 02名前付きボリュームの作成と確認
  3. 03データベースの永続化設定
  4. 04ボリュームデータのバックアップと復元
  5. 05ストレージドライバーの選択と確認
  6. 06よくあるストレージ問題の解決

活用シーン

  1. 01データベースコンテナのデータを永続化
  2. 02開発中のアプリコードをコンテナに同期
  3. 03一時データや機密データをメモリに保持
  4. 04Dockerボリュームをバックアップまたは復元

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/full-stack-skills/docker-skills --skill docker-storage

インストール後、Claude Code で/docker-storageを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

agents/
openai.yaml
examples/
01-mysql-volume-persistence.md
02-backup-restore.md
references/
01-volume-decision-guide.md
02-volume-management.md
03-storage-drivers.md

詳細

Docker ストレージ — ストレージとデータの永続化

Docker で永続データを管理するための包括的なガイダンスです。

使用するタイミング

ユーザーが次の内容に言及した場合は、必ずこのスキルを使用してください:

  • 「docker volume」、「データボリューム」、「データの永続化」
  • 「bind mount」、「tmpfs」
  • 「コンテナのデータをどう保存するか」、「データを失わない」
  • 「データベースコンテナをどう永続化するか」
  • 「バックアップと復元」、「ストレージドライバー」

ストレージタイプの比較

タイプ永続性パフォーマンス用途
Volume✅(Docker が管理)高(ネイティブ)本番環境のデータベース、共有データ
Bind Mount✅(ホストのファイルシステム)高開発(コードのライブ同期)、設定ファイル
Tmpfs❌(メモリのみ)最高シークレット、一時ファイル、機密データ
視覚的な比較
Volume:                       Bind Mount:               Tmpfs:
  Container                     Container                 Container
     │                              │                        │
  Docker-managed               /host/path                 Memory only
  /var/lib/docker/volumes/        ↕                     (no disk)
     ↕                         Container sees:              ↕
  Container sees:              /container/path           Container sees:
  /data                         = host files              /tmp (in RAM)

Volume の管理

# Create & inspect
docker volume create mydata
docker volume ls
docker volume inspect mydata

# Use in container
docker run -v mydata:/var/lib/mysql mysql:8
docker run --mount source=mydata,target=/var/lib/mysql mysql:8  # explicit syntax (recommended)

# Cleanup
docker volume prune      # Remove unused volumes
docker volume rm mydata  # Remove specific volume
名前付き Volume と匿名 Volume
-v mydata:/data      → Named volume  (mydata) — survives container removal ✅
-v /data             → Anonymous volume — hard to identify later ❌

Bind Mount

# Read-write bind mount
docker run -v $(pwd)/app:/app nginx

# Read-only (protect host files)
docker run -v $(pwd)/config:/etc/nginx:ro nginx

# Explicit syntax
docker run --mount type=bind,source=$(pwd)/app,target=/app nginx

Tmpfs(メモリ)

# Ephemeral data, never touches disk
docker run --tmpfs /tmp:rw,noexec,nosuid,size=64m nginx
docker run --mount type=tmpfs,destination=/tmp,tmpfs-size=64m nginx

データベースの永続化パターン

PostgreSQL
docker volume create pgdata
docker run -d \
  --name postgres \
  -e POSTGRES_PASSWORD=secret \
  -v pgdata:/var/lib/postgresql/data \
  -p 5432:5432 \
  postgres:16-alpine
MySQL
docker volume create mysqldata
docker run -d \
  --name mysql \
  -e MYSQL_ROOT_PASSWORD=secret \
  -v mysqldata:/var/lib/mysql \
  -v $(pwd)/my.cnf:/etc/mysql/conf.d/my.cnf:ro \
  -p 3306:3306 \
  mysql:8.4
Redis(永続化)
docker volume create redisdata
docker run -d \
  --name redis \
  -v redisdata:/data \
  -p 6379:6379 \
  redis:7-alpine redis-server --appendonly yes

バックアップと復元

# Backup (using a temporary container)
docker run --rm \
  -v mysqldata:/source \
  -v $(pwd):/backup \
  alpine tar czf /backup/mysqldata-backup.tar.gz -C /source .

# Restore
docker run --rm \
  -v mysqldata:/target \
  -v $(pwd):/backup \
  alpine tar xzf /backup/mysqldata-backup.tar.gz -C /target

ストレージドライバー

ドライバー状態備考
overlay2✅ デフォルトほとんどの用途に最適。コピーオンライト方式
devicemapper非推奨-
aufs非推奨-
btrfs/zfs特定用途向けファイルシステムが一致する場合に使用
docker info | grep "Storage Driver"  # Check current

ワークフロー — 推奨設定手順

ステップ 1:ストレージタイプを決定する:永続データ → Volume、開発時のホットリロード → Bind Mount、一時キャッシュ → tmpfs ステップ 2:Volume を作成する:docker volume create db_data ステップ 3:コンテナにマウントする:docker run -v db_data:/var/lib/mysql mysql ステップ 4:確認する:docker volume inspect db_data + docker exec mysql ls /var/lib/mysql ステップ 5:バックアップする:docker run --rm -v db_data:/source -v $(pwd):/backup alpine tar czf /backup/db.tar.gz -C /source .

注意点 — よくある落とし穴

  • 匿名 Volume が蓄積する:名前を指定しない -v /data を使うたびに、新しい匿名 Volume が作成されます。→ 解決策:docker volume prune ですべての未使用 Volume を削除します。名前付き Volume を使用してください:-v mydata:/data。
  • Bind Mount のパス:絶対パスである必要があります。→ 解決策:docker run では -v $(pwd)/app:/app を使用してください。Compose では -v ./app:/app も使用できます。
  • Bind Mount の権限問題:コンテナの UID とホストの UID が異なると、アクセスが拒否されます。→ 解決策:--user $(id -u):$(id -g) を指定するか、Dockerfile のエントリーポイントで RUN chown 1000:1000 /data を実行してください。
  • コンテナ削除時のデータ損失:-v を指定しないと、コンテナの削除時にデータが失われます。--rm フラグを指定すると、さらに危険です。→ 解決策:必ず名前付き Volume を使用してください:docker run -v db_data:/var/lib/mysql。
  • macOS の Bind Mount のパフォーマンス:Docker Desktop for Mac の Bind Mount は遅くなります。→ 解決策::cached または :delegated のマウントオプションを使うか、I/O 性能を高めるために名前付き Volume を使用してください。

境界 — 能力の範囲(適用できる場面とできない場面)

分類場面説明
✅ 対応可能データ永続化の設定(Volume/Bind Mount/tmpfs)3 種類のストレージの作成、マウント、管理
✅ 対応可能バックアップと復元tar + --volumes-from によるバックアップと復元
✅ 対応可能ストレージドライバーの選定overlay2/btrfs/zfs の比較
⚠️ 条件付きNFS/クラウドストレージの Volume ドライバー対応するドライバープラグインのインストールが必要
⚠️ 条件付きmacOS での Bind Mount のパフォーマンス:cached/:delegated または名前付き Volume を使用
❌ 対象外K8s PersistentVolume/PVCdocker-production と K8s のドキュメントを使用
❌ 対象外分散ファイルシステム(Ceph/GlusterFS)システム管理者の担当範囲
❌ 対象外データベースのパフォーマンス最適化DBA の専門領域

このスキルを使用しない場合

❌ 使用を避けるケース✅ 代わりに使用
コンテナの実行(データに関する懸念がない場合)docker-run
複数コンテナのオーケストレーションdocker-compose
Kubernetes ストレージ(PV/PVC)K8s のドキュメント
Docker の基本docker-basics

セキュリティと安定性

  • コンテナによる変更を許可しない設定ファイルには :ro を使用してください。
  • セキュリティ上の影響を理解せずに、Docker ソケット(/var/run/docker.sock)を Bind Mount しないでください。
  • Volume は定期的にバックアップしてください。特にデータベースの Volume は必ずバックアップしてください。
  • 実行可能なスクリプトは同梱されていません。ガイダンスのみです。

📚 公式ドキュメントの参考資料

ドキュメントアドレス
Docker ストレージhttps://docs.docker.com/storage/
Volumeshttps://docs.docker.com/storage/volumes/
Bind Mountshttps://docs.docker.com/storage/bind-mounts/
tmpfshttps://docs.docker.com/storage/tmpfs/
ストレージドライバーhttps://docs.docker.com/storage/storagedriver/
docker volume コマンドhttps://docs.docker.com/reference/cli/docker/volume/

🧭 Docker Skills Journey

📍 現在の位置:docker-storage — データの永続化

← 前へ:docker-run / docker-networking → 次へ:docker-compose / docker-security

FAQ

Q1:このスキルをすぐに使い始めるには? A:上記のクイックスタートのセクションを参照し、手順に沿って操作してください。

Q2:バージョンの互換性に関する問題が発生した場合は? A:依存関係のバージョンを確認し、lock ファイルで固定してください。よくある落とし穴のセクションも参照してください。

Q3:本番環境で使用するには? A:ベストプラクティスのセクションを参照し、設定が正しいことを確認して、監視とログを適切に行ってください。

Q4:パフォーマンスを最適化するには? A:パフォーマンス最適化に関するドキュメントを参照し、キャッシュやインデックスなどを活用してください。

Q5:貢献したり、問題を報告したりするには? A:GitHub リポジトリで Issue または Pull Request を提出してください。

Q6:中国語に対応していますか? A:中国語のドキュメントと中国語のコメントに対応しています。国内向け適応のセクションを参照してください。

コメント