Docker

ボリュームとネットワーク

Docker

データ永続化とコンテナ間通信

ボリューム

データの永続化とボリューム管理

volumes.sh bash
# ボリューム作成・一覧・削除
docker volume create mydata
docker volume ls
docker volume inspect mydata
docker volume rm mydata
docker volume prune              # 未使用ボリューム削除

# ボリュームをコンテナにマウント
docker run -d \
  -v mydata:/var/lib/postgresql/data \
  postgres:16

# バインドマウント(ホストのディレクトリを直接マウント)
docker run -d \
  -v $(pwd)/src:/app/src \
  -v $(pwd)/public:/app/public \
  myapp:dev

# 読み取り専用マウント
docker run -d \
  -v $(pwd)/config:/app/config:ro \
  myapp

# tmpfs(メモリ上の一時ファイル)
docker run -d \
  --tmpfs /app/temp \
  myapp

# ボリュームの種類:
# named volume:  docker が管理 → 本番データの永続化
# bind mount:    ホストパスを直接指定 → 開発時のホットリロード
# tmpfs:         メモリ上 → 機密データ・一時ファイル

ネットワーク

コンテナ間通信とネットワーク設定

networks.sh bash
# ネットワーク作成・一覧・削除
docker network create mynet
docker network ls
docker network inspect mynet
docker network rm mynet

# コンテナをネットワークに接続して起動
docker run -d --name db --network mynet postgres:16
docker run -d --name app --network mynet \
  -e DB_HOST=db \
  myapp:latest
# 同じネットワーク内ではコンテナ名でDNS解決できる

# 既存コンテナをネットワークに接続・切断
docker network connect mynet myapp
docker network disconnect mynet myapp

# ネットワークの種類:
# bridge:  デフォルト。同一ホスト内のコンテナ間通信
# host:    ホストのネットワークを直接使用(Linuxのみ)
# none:    ネットワーク無効
# overlay: Docker Swarmでの複数ホスト間通信

# ポートマッピング
docker run -p 8080:80 nginx          # localhost:8080 → container:80
docker run -p 127.0.0.1:8080:80 nginx # ループバックのみ
docker run -p 80 nginx               # ランダムホストポート