🦘
実験:Docker のバインドマウントって階層化できるの?
実験
こんな感じのディレクトリ構成にしたかった。
[host] [container]
jikken/ (root)/
├ hoge/ -> └ hoge/
└ fuga/ -> └ fuga/
ホスト側 | マウント先 |
---|---|
~/jikken/hoge |
/hoge |
~/jikken/fuga |
/hoge/fuga |
つまりコマンドで言えば以下のコマンドが実行可能なのか & 実行した結果どうマウントされるのか?
$ docker run -it --rm \
-v ${PWD}/hoge:/hoge \
-v ${PWD}/fuga:/hoge/fuga \
ubuntu:latest /bin/bash
テレビの前のみんなも実行する前に挙動を予測してみよう!!
実験結果
Docker が使える適当な Linux マシンで以下のコマンドを実行した[1]。
(host)$ mkdir jikken
(host)$ cd jikken
(host)$ mkdir hoge fuga
(host)$ ls
fuga hoge
(host)$ sudo docker run -it --rm \
-v ${PWD}/hoge:/hoge \
-v ${PWD}/fuga:/hoge/fuga \
ubuntu:latest /bin/bash
(container)# ls
bin boot dev etc hoge home lib lib32 lib64 libx32 media mnt opt proc root run sbin srv sys tmp usr var
(container)# cd hoge
(container)# ls
fuga
(container)# touch piyo.txt
(container)# ls
fuga piyo.txt
(container)# cd fuga
(container)# ls
(container)# touch poyo.txt
(container)# ls
poyo.txt
(container)# exit
(host)$ ls hoge
fuga piyo.txt
(host)$ ls hoge/fuga
(host)$ ls fuga
poyo.txt
実験結果の解釈は以下。
- マウントしたディレクトリ
/hoge
の中にfuga
を新たにマウントすることは可能であった。 - コンテナ側では想定した通りのディレクトリ構造になっていた。
- コンテナ側
/hoge
の中で作成したファイルはホスト側hoge
の中に作成された。 - コンテナ側
/hoge
の中にfuga
があるように、ホスト側hoge
の中にもfuga
が作成された。 - コンテナ側
/fuga
の中で作成したファイルはホスト側fuga
の中に作成されたが、ホスト側hoge/fuga
の中には作成されなかった。
以上より、ホスト側 hoge
の中にもマウントポイントとしてのディレクトリ fuga
は作成されるが、その実体はホスト側 fuga
をマウントしていることが分かる。
まぁ Linux マシンにおいてさまざまなデバイスが /
以下にマウントされていることを考えれば自明な挙動ではある。素直な挙動でよかった。
-
私の環境では
sudo
時も環境変数${PWD}
が引き継がれるように/etc/sudoers.d
に設定を追加している。そのような設定をしていない人は${PWD}
をjikken
への絶対パスに置き換える。 ↩︎
Discussion