ホストマシンとコンテナのボリュームをマウント
e.g.
ホストマシンの ~/work と コンテナ内の /myapp を同期させる
~/work/file1.txt
/myapp/file2.txt
ファイル名が同じだった場合、ホストマシンがコンテナを上書きする
### Dockerにおけるマウント指定
Dockerによる環境構築をする際、ボリュームをマウントする方法はDockerfile, Composeファイル、コマンドラインの3つがある
### 1. Dockerfileによるマウント
Dockerfile内でVOLUME命令を書く。この命令では、引数としてコンテナ側のディレクトリしか指定することはできない
VOLUME /myapp
Dockerfile
FROM debian RUN mkdir /myapp && \ echo "Hello, World" > /myapp/file.txt VOLUME /myapp
$ sudo docker build -t hello .
$ sudo docker run -it hello bash
# cat /myapp/file.txt
Hello, World
Dockerfileにボリュームのマウント設定をする際は、ホストマシンのディレクトリを指定することができない
### 2. docker-composeによるマウント
composeファイルでは、ホストマシンのディレクトリも指定することができる
volumes: - ./work:/myapp
– ホストマシンのディレクトリ: Composeファイルから見た相対パスもしくは絶対パス
– コンテナのディレクトリ: 絶対パス
$ tree
.
├── docker-compose.yml
└── test
└── file.txt
$ cat test/file.txt
hello shinbashi!
docker-compose.yml
version: '3' services: web: image: debian volumes: - ./test:/myapp
$ sudo docker-compose run web bash
Creating network “entrypoint_default” with the default driver
root@e8b020e943ae:/# cat /myapp/file.txt
hello shinbashi!
root@e8b020e943ae:/#
### DockerfileとComposeファイルを同じディレクトリに作成
$ tree
.
├── Dockerfile
├── docker-compose.yml
└── test
└── file.txt
dockerfile
FROM debian RUN mkdir /myapp && \ echo "It's a beautiful day." > /myapp/another_file.txt
docker-compose.yml
version: '3' services: web: build: . volumes: - ./test:/myapp
なるほどー、少し見えなかったものが見えてきた