docker-compose 名前付きボリューム VS バインドマウント

2024/01/10に公開

目標

  • 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