2017/05/31
データ・ボリューム・コンテナはデータを保存するためのコンテナでは無い
あと1日で6月になってしまうので更新。今回も Docker ネタ。ここ1ヶ月半近くずっと Docker を弄くり続けています。本当にやりたいことは Docker を使ったアプリ開発の更に先にあるんだけど、せっかくの機会、ということで Docker を自主的に使って少々時間が掛かってます(でも環境に依存しないようにしたい意図があるし今後のことを考えると今勉強しといたほうが良いって思ってる)。
ちょっと無駄話になってしまうので、読み飛ばしてもらったほうが良いかもしれませんが、一ヶ月半使った感想を書きます。
最初は結構動作にわからない部分が多く、また特に Docker Compose、コンテナ間の組み合わせなどすんなり分かんない部分もあったけどわかってしまえば結構簡単です。ボリュームなど実装がどういうものかわかってしまえば、書き方自体はシンプルで使うのは意外と楽です。
ただ、データの扱いについては非常に混乱したというかややこしいと思いました。
ここから本題。
まず、ボリュームについて理解しなければいけませんでしたが、こっちに関しては比較的シンプルで、各所の説明通りホストのディレクトリを各々の Docker コンテナでマウントして共有してるだけでした。
しかし、データ・ボリューム・コンテナはずっとデータを格納するコンテナ機能があるんだろうと思っていました。でもこれが超越的解釈で全くイメージとは異なる機能でした。
これから Docker を使い始めようと思ってあちこち見て回ってある程度情報を掴んできた人だと丁度こんな勘違いをしていると思います。
結論から言うとデータ・ボリューム・コンテナは単なるコンテナ。
これにボリュームとするホストのディレクトリをマウントさせた上で、ボリュームをコンテナ間で共有するためのいわゆるハブとして、各アプリ用コンテナと通信するようにしたのがこれの正体です。
データ・ボリューム・コンテナはデータを格納するんじゃなくて、あるボリュームを複数コンテナからアクセス出来るようにするためのコンテナです。
そして、こういう機能が Docker に備わっているわけではありません。
ボリュームをマウントさせた通常のコンテナを、ボリュームへのアクセス用ハブとして使っているものをこう呼んでるだけです。
ただし、通常 Docker のコンテナは何らかの個別のアプリを格納し、実行していますが、データ・ボリューム・コンテナでは BusyBox コンテナという最低限の Linux のコマンドのみを備えたコンテナを使用することが多いです(BusyBox は多くのコマンドを持ったツールでこれを格納したコンテナ)。
これが何故かは簡単で、データ・ボリューム・コンテナは単なるアクセスポートとしてしか使わないので容量・動作を軽くするためです。でもこれってなんか勿体なくない?
データ・ボリューム・コンテナはボリュームをコンテナ間で共有するためのものです。
というのが多くのサイトで目にする説明ですが、明らかに言葉不足です。こんな説明じゃ実体なんて分かるはずもなく生き殺し。
こうなる最大の理由はボリュームをコンテナ間で共有できないということが説明されてないことに尽きると思います(図があると尚良し ←)。
そもそも
Dockerは環境を持ち運べるようにしたものであって、データを移動できるようにしたものでは無い。
別にデータ・ボリューム・コンテナ経由でデータを格納したからって、結局データはホストに保存されるので ADD に対して可搬性は高くならない。
これで話は終わり。。
ところが、私を更に混乱させたのが、ボリュームだけでもコンテナ間で共有できるという情報だった。
じゃあなんでデータ・ボリューム・コンテナなんて使うんだ?
ますます理解できなくなってきた。
この後いろいろ調べた末、記事投稿時点でデータ・ボリューム・コンテナは不要だと判明しました。
続く
- 関連記事
-
- DockerはVMと同列に比較できるものではない (2017/12/24)
- データ・ボリューム・コンテナは不要どころかもう使えない子 (2017/06/01)
- データ・ボリューム・コンテナはデータを保存するためのコンテナでは無い (2017/05/31)
- Docker を CentOS 7 に入れてみた (2017/04/24)
コメント