【Docker】Volumeについてのメモ

コンテナのライフサイクルでの終了と共に、コンテナ上のファイルは全て消えてしまうので、それを防ぎたいときのためにコンテナ外に管理できるファイルのことボリュームと言う。

docker container run -v ホストのパス:コンテナのパス runするイメージ名など

こうすることで、指定したホスト側のパスをコンテナ側のパスと共有できる。

ちなみにホスト側のパスは省略することが可能で、

docker container run -v コンテナ側のパス runするイメージ名など

としてあげると、ホスト側のパスはDocker上に自動で割り当てられる。自動で割り当てられたホスト側のボリュームは/var/lib/docker/volumesとかになるっぽい。

WindowsMacのDockerだとハイパーバイザ型の軽量Linuxを立ち上げ、その上でコンテナを動かしているため、Windowsの/var/lib/docker/volumesを確認しても存在していない。軽量Linux側のディレクトリに存在している。

docker-composeでボリュームを指定するときも基本は同じで、

volumes:
  - ホスト側のパス:コンテナ側のパス
  #または
  - コンテナ側のパス

とする。

ボリュームには名前をつけることができ、ボリュームのパスを指定するときに

ボリューム名:コンテナ側のパス

とすることで、名前をつけれる。

名前を付けなかった場合は、適当な文字列で自動的に名前が付けられるので非常に分かりづらい。

(docker volume lsで確認できる)

名前付きのボリュームは複数のサービスを跨ることが可能。

docker-composeで名前付きのボリュームを作成するときは、トップレベルでボリューム名を指定しておく。

version: '3'

services:
  web: #省略

  db:
    volumes:
      - mysql_data:/var/lib/mysql
volumes:
  mysql_data: