概要
dockerではコンテナを削除するとデータが消えてしまうが、データを永続化することでコンテナが削除されてもデータを残すことができる。
データの永続化にはボリュームマウントとバインドマウントがあり、データが保存される場所が異なる。
公式では、データの移行やバックアップが容易なボリュームマウントが推奨されている。
ただし、開発環境ではファイルの変更をリアルタイムで反映できるバインドマウントを使うのが一般的である。
ボリュームマウント
ボリュームマウントとは
- Dockerが管理する記憶領域にデータが保存される。
- データ変更はコンテナを通して行う必要があるため、直接編集しないデータに向いている。
- docker compose downでは削除されない(-vオプションで削除される)
- compose.yamlの大項目volumesにボリューム名を記述する。
- compose.yamlのservicesの中のvolumesでボリュームを利用する。
※ Docker Composeのファイル名は以前はdocker-compose.yamlであったが、現在はcompose.yamlが推奨されている
compose.yamlのサンプル(mariaDBの場合)
services:
db:
image: mariadb:10.7
volumes:
- db-data:/var/lib/mysql
environment:
MARIADB_ROOT_PASSWORD: hoge
MARIADB_USER: taro
MARIADB_PASSWORD: taro123
MARIADB_DATABASE: sample
TZ: Asia/Tokyo
volumes:
db-data:
バインドマウント
バインドマウントとは
- ホストOSのディレクトリ・ファイルにデータが保存される。
- ホストのファイルを更新するとコンテナ内にも反映されるので、データ編集が容易。
- compose.yamlのservicesの中のvolumesにホストのパスを指定する。
compose.yamlのサンプル(mariaDBの場合)
services:
db:
image: mariadb:10.7
volumes:
- ./db-data:/var/lib/mysql
environment:
MARIADB_ROOT_PASSWORD: hoge
MARIADB_USER: taro
MARIADB_PASSWORD: taro123
MARIADB_DATABASE: sample
TZ: Asia/Tokyo
services内のvolumesは、左側をパスで指定した場合はバインドマウント、そうでない場合はボリュームマウントとなる。./db-data:/var/lib/mysql
とdb-data:/var/lib/mysql
ではマウント方法が異なるので注意が必要である。
コメント