Dockerで作成したコンテナ内のデータ(DBなど)を永続化させるために「volumes」を使用します。このボリュームの指定方法の違いにより、永続化させたファイルがどこに保存されるのかを確認します。
Dockerの「volumes」での永続化
今回はPostgreSQLを使用したコンテナを作成します。
Volumesで「パスで指定する」
21行目:PostgreSQLのデータをカレントフォルダ配下(compose.yamlが有るフォルダに”db”フォルダ)で永続化する指定です。
your root\compose.yaml
services:
#データベース
db:
#イメージ+バージョン ※latestを常に最新が適用されるが意図しない挙動になる可能性あり
image: postgres:16.1
#コンテナ名
container_name: postgresql-db
#設定
environment:
#データベース名(省略時は"postgres")
POSTGRES_DB: "postgresql-local"
#接続ユーザー名
POSTGRES_USER: "db-user"
#接続パスワード
POSTGRES_PASSWORD: "db-pass"
#ボリューム(永続化用)
volumes:
#パス(ローカル相対パス:コンテナ内パス)
- ./db:/var/lib/postgresql/data
#ポート(外部ポート:内部ポート)
ports:
- 5432:5432
ボリュームの実体
指定したフォルダに永続化したデータが格納されます。
your root/
|-- compose.yaml
`-- db ※この配下のフォルダ・ファイルはPostgreSQLのデータ(永続化したもの)
|-- base
|-- global
|-- pg_commit_ts
`-- ・・・
Volumesで「名前で指定する」
21行目:PostgreSQLのデータを「db-store」という名前のボリュームで永続化する指定です。
26行目:「db-store」という名前のボリュームを使用することを指示しています。
※「db-store」という名前は自由に変更可能です。
your root\compose.yaml
services:
#データベース
db:
#イメージ+バージョン ※latestを常に最新が適用されるが意図しない挙動になる可能性あり
image: postgres:16.1
#コンテナ名
container_name: postgresql-db
#設定
environment:
#データベース名(省略時は"postgres")
POSTGRES_DB: "postgresql-local"
#接続ユーザー名
POSTGRES_USER: "db-user"
#接続パスワード
POSTGRES_PASSWORD: "db-pass"
#ボリューム(永続化用)
volumes:
#パス(ボリューム名:コンテナ内パス)
- db-store:/var/lib/postgresql/data
#ポート(外部ポート:内部ポート)
ports:
- 5432:5432
volumes:
db-store:
ボリュームの実体
WindowsのWSL内にあります。Windowsエクスプローラで「\\wsl$」を開くと確認できます。
wsl$
|-- docker-desktop
|-- docker-desktop-data
`-- Ubuntu
で、肝心のデータですが、「\wsl.localhost\docker-desktop-data\data\docker\volumes」に入っています。「db-store」という名前は自分で指定した名前です。
wsl$
|-- docker-desktop
|-- docker-desktop-data
| `-- data
| `-- docker
| `-- volumes
| `-- db-store
`-- Ubuntu
コメント