⛳
docker-compose 名前付きボリューム VS バインドマウント
目標
- volumesの設定のやり方には二つがあるので、それぞれやってみて理解してみましょう。
名前付きボリューム(Docker 管理のボリューム)
docker-compose.yml
services:
db:
image: mysql
restart: always
volumes:
- mysql-compose-volume:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD=root1234
- MYSQL_DATABASE=rootdb
ports:
- "3307:3306"
volumes:
mysql-compose-volume:
特徴
- mysql-compose-volume という名前の Docker 管理のボリュームを使用しています。このボリュームは Docker ホストのボリューム管理システムによって管理され、コンテナの外部でデータを保持します。
volumes削除の挙動
- docker-compose down -v コマンドを実行すると、この名前付きボリュームは削除されます。この -v オプションは、docker-compose.yml で定義された名前付きボリュームを含め、すべてのボリュームを削除するためです。
バインドマウント (ホストマシンのディレクトリを使用)
docker-compose.yml
services:
db:
image: mysql
restart: always
volumes:
- ./data_volumes:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD=root1234
- MYSQL_DATABASE=rootdb
ports:
- "3307:3306"
特徴
- ホストマシンの ./data_volumes ディレクトリ(カレントディレクトリにある data_volumes ディレクトリ)をコンテナ内の /var/lib/mysql にマウントしています。
volumes削除の挙動
- docker-compose down -v コマンドを実行しても、バインドマウントされたホストのディレクトリ(この場合は ./data_volumes)は削除されません。これは、バインドマウントがホストシステムのディレクトリを直接使用するため、Docker のボリューム管理の範囲外であるためです。
Discussion