技術ブログ

(技術系中心)基本自分用備忘録なので、あくまで参考程度でお願いします。

Dockerのvolumesについて(永続化について)

Dockerのvolumesについて

Dockerのvolumesについての備忘録

そもそもvolumes(ボリューム)とは?

-> ボリュームとは、データを永続化できる場所のこと。

Dockerコンテナを実行中に書き込まれたファイルは、ホスト側にファイル・ディレクトリをマウントしない限りコンテナを破棄したタイミングでディスクから消去されます。

なので、データを永続化したいときはコンテナの外にデータを置く必要がある。

その場所をvolumes(ボリューム)と呼ぶ。(正式にはData Volume)

なぜvolumes(ボリューム)に保存されるのか?

volumesはDockerコンテナ内のディレクトリをディスクに永続化するための仕組みです。

これを利用すれば、ホスト・コンテナ間でのディレクトリの共有・再利用が可能になります。

また、volumesはコンテナを破棄してもディスクに保存されるのでコンテナでステートフルなアプリケーションを実行する時に利用します。

docker-compose.ymlでのvolumesの書き方

パスをボリュームとしてマウントします。オプションとしてホスト側のパスを指定(ホスト:コンテナ)

Compose file version 3 reference | Docker Documentation

■ サンプル

version: '3'
services:
  db:
    image: postgres:11.2
    # ディレクトリのマウント設定(dbデータなどを残す)
    volumes:
      - ./tmp/db:/var/lib/postgresql/data

ホスト: ./tmp/db コンテナ: /var/lib/postgresql/data ホスト側のデータをコンテナ側のデータ領域にボリュームとしてマウントしています。

(DockerHub公式リポジトリのpostgresのPostgreSQLデータ領域は/var/lib/postgresql/dataなので、このデータ領域をホスト側から共有できればPostgreSQLのコンテナを消してもデータは残る。)

参考

Docker/Kubernetes 実践コンテナ開発入門