Dockerで上位ディレクトリにあるファイルやディレクトリをマウントするTips
概要
Dockerでなにかしらの理由でカレントディレクトリから上位ディレクトリにあるファイルやディレクトリをコンテナで使いたい場合のTipsです。
前提として、カレントディレクトリの配下にあるディレクトリやファイルに対しては、難しいことを考えなくてもvolumeマウントしたり、COPYでコピーすることは可能です。
今回は対象がカレントディレクトリより、上位のディレクトリを対象とする場合です。
ディレクトリの構成
下記のようなテスト用のディレクトリ構成と過程する。
src配下には一般的にアプリケーションのソースコードがあるとする。
.
├── .github
│ └── config.yml
├── docker
│ └── Dockerfile
└── src
└── index.html
条件
- カレントディレクトリがdocker
docker run
Dockerfileではなくdocker run
コマンドを使った場合のパターン。
srcディレクトリだけをマウントする
Dockerfileをdocker
ディレクトリ配下に配置して、docker
へcd
する。
そこでdocker run
コマンドでコンテナを起動する際に、アプリケーションのソースコードをマウントするには下記を実行する。
total 4
drwxr-xr-x 3 root root 96 Jun 10 12:40 .
drwxr-xr-x 1 root root 4096 Jun 10 12:47 ..
-rw-r--r-- 1 root root 0 Jun 10 12:40 index.html
リポジトリ全体をmountする
上位ディレクトリをマウントする際にpwdで上位ディレクトリを指定するだけでOK。
total 4
drwxr-xr-x 5 root root 160 Jun 10 12:46 .
drwxr-xr-x 1 root root 4096 Jun 10 12:58 ..
drwxr-xr-x 3 root root 96 Jun 10 12:41 .github
drwxr-xr-x 3 root root 96 Jun 10 12:46 docker
drwxr-xr-x 3 root root 96 Jun 10 12:40 src
特定のファイルと特定のディレクトリをmountする
上記と同じで、pwdを使ってVolumeマウントすることで、ファイルもディレクトリもマウントすることが可能。
total 8
drwxr-xr-x 4 root root 128 Jun 10 13:00 .
drwxr-xr-x 1 root root 4096 Jun 10 13:00 ..
-rw-r--r-- 1 root root 5 Jun 10 12:41 config.yml
-rw-r--r-- 1 root root 0 Jun 10 12:40 index.html
Dockerfile
基本的にはDockerfileで実施する場合は、今回の構成だとdocker
ディレクトリで実施するのではなく、その上位のディレクトリで下記のようにしてbuildするのが基本である。
drwxr-xr-x - kazuma 10 6 21:41 .github
drwxr-xr-x - kazuma 11 6 01:23 docker
drwxr-xr-x - kazuma 10 6 22:00 src
$ docker build -t mounttest -f docker/Dockerfile .
ただし、もしdocker
ディレクトリ内で実行したい理由があった場合は、下記のように実行することでbuild時に上位ディレクトリのデータをコピーすることが可能である。