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:
追加参照