<Docker>ボリュームの実体はどこに保存されているのか

Docker

Dockerで作成したコンテナ内のデータ(DBなど)を永続化させるために「volumes」を使用します。このボリュームの指定方法の違いにより、永続化させたファイルがどこに保存されるのかを確認します。

Dockerの「volumes」での永続化

今回はPostgreSQLを使用したコンテナを作成します。

この記事が対象とする環境
ホスト(HOST) ※実行マシン
Windows
Docker Desktop v4.22.1
ゲスト(GUEST)※Dockerコンテナ
PostgreSQL v16.1

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

札幌在住エンジニア。JavaやPHPやWordPressを中心とした記事が中心です。

【SE歴】四半世紀以上
【Backend】php / java(spring) / c# / AdobeFlex / c++ / VB / cobol
【Frontend】 vue.js / jquery他 / javascript / html / css
【DB】oracle / mysql / mariadb / sqlite
【infrastructure】aws / oracle / gcp
【license】aws(saa-c03) / oracle master / XML Master / Sun Certified Programmer for the Java 2 Platform 1.4

Nobelをフォローする
DockerPostgreSQL
Nobelをフォローする

コメント

タイトルとURLをコピーしました