ボリュームとネットワーク
Docker
データ永続化とコンテナ間通信
ボリューム
データの永続化とボリューム管理
# ボリューム作成・一覧・削除
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: メモリ上 → 機密データ・一時ファイルネットワーク
コンテナ間通信とネットワーク設定
# ネットワーク作成・一覧・削除
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 # ランダムホストポート