Docker共有ディレクトリ(ボリューム)

Dockerコンテナとホスト間でディレクトリ(ボリューム)を共有する場合

-vオプションでコロン前の箇所を絶対パス(/xxx…, ~/xxx…)で指定した場合、ホスト上にコンテナ内ディレクトリとリンクしたディレクトリ(ボリューム)が作成されます。

-vオプションのコロン:の前後で、ホストディレクトリ:コンテナディレクトリを指定します。

$ docker run --name=nginx -d -v ~/nginxlogs:/var/log/nginx -p 5000:80 nginx

コンテナ内のnginxのログをホスト上でも確認できるようになります。

$ cat ~/nginxlogs/access.log

Dockerコンテナ間でディレクトリ(ボリューム)を共有する場合

-vオプションでコロン前の箇所をディレクトリ名のみで指定した場合、このディレクトリとリンクしたディレクトリがコンテナ内に作成されます。

まず初めに、どのコンテナにも関与しないディレクトリを作成します。

$ docker volume create --name DataVolume1

ubuntuイメージから上記ディレクトリをマウントしたコンテナを起動して、コンテナ内に作成されたディレクトリにテキストファイルExample1.txtを追加します。

$ docker run -ti --rm -v DataVolume1:/datavolume1 ubuntu

コンテナ内で

# echo "Example1" > /datavolume1/Example1.txt

コンテナ停止後にコンテナ自身が削除されますが(オプション:–rm)、再度同じコマンドで新規コンテナを稼働させた場合、DataVolume1の内容はそのまま引き継がれます。

$ docker run -ti --rm -v DataVolume1:/datavolume1 ubuntu

コンテナ内で

# cat /datavolume1/Example1.txt

アウトプット

Example1

Docker-Composeファイルで共有

以下docker-composeファイルでは、共有ディレクトリ(ボリューム)としてdata-volumeが作成され、コンテナのdbサービスとbackupサービスで共有されています。

version: "3.7"
services:
  db:
    image: db
    volumes:
      - data-volume:/var/lib/db
  
 backup:
    image: backup-service
    volumes:
      - data-volume:/var/lib/backup/data

volumes:
  data-volume:

追加参照