はじめに
Docker in Docker (dind)のボリュームマウントで躓いたので図解でまとめます
問題
以下のような構成でボリュームマウントをしようと考えました
Docker1の/hoge
とDocker2の/hoge
をマウントしようとしましたがなぜかうまくディレクトリがマウントされておらずDocker2の/hogeには中身のフィルがコピーされていませんでした
Docker1の中で以下のコマンドでボリュームマウントしました
$ docker run -v /hoge:/hoge ...
解決方法
DinDの場合、ボリュームマウントすると以下のようにホストのボリュームをマウントしてしまいます(Docker1のボリュームは関係なくデーモンのボリュームを共有する)
なので、ローカルと共有している/sample
とDocker1の/hoge
をマウントして、ローカルの/sample
とDocker2の/hoge
をマウントするとうまくいきます
# ローカルで叩く
$ docker run -v /hoge:/sample ...
# Docker 1で叩く
$ docker run -v /sample:/hoge ...
この方法は1度ローカルのボリュームを経由するのでスピードが遅くなるなどデメリットも存在しますが、DinDで行う場合はこの方法が素早く実現する方法みたいです
おわりに
過去に1度同じところでつまづいていたのですが、すぐに気づけなかったので図解でまとめてみました