この記事はDockerその2アドベントカレンダーの21日目の記事です。
タイトルからあおり記事のようですが、説明が出回っていなかったので、Docker=速くなる、という誤解を解きたいと思います。少なくとも自分は長い間速くなるというのを信じてました。
この説明では、Production環境でDockerを導入するという前提で進めます。
なぜDockerは速いと言われているのか
よくDocker(Container)についての説明で以下のような説明がされています。
出典:https://www.docker.com/what-docker
ラッパーが少ないから当然速いし、軽いよと。
私はこの図を見たときに、
なんて素晴らしい技術が開発されたんだ!
起動が遅くて、重いVMなんてもう必要なくなるんだ!
と狂喜しました。
実際はどうなの
ところが、Dockerを使い始める前に有識者に話を聞くと、実際には速くならないしむしろパフォーマンスが落ちるとの意見が。
完全にDocker社と意見が割れていて、どっちかが嘘を言っている?! と疑心暗鬼ながらもTutorialをやって、どんどんDockerにのめり込んでいきました。
真実は
Dockerを使い始めて数ヶ月が立ち、Dockerの勉強に勤しんでいたある日、"Docker for the virtualization admin" というeBookで真実が分かりました。
"Physical or Virtual?" セクションを要約をすると、
バーチャルマシンはDocker のhostサーバーとして素晴らしいものですが、企業ではよくベアメタルを使う方が良いと考えています。
Dockerエキスパート:ベアメタルかバーチャルマシンかは場合によるし、良い点と悪い点がある。
CapacityとDisaster Recoveryの面ではバーチャルマシンが良いし、Latencyはベアメタルの方が良い。
問題は自分の状況にはどちらがいいのかを選択することであり、Dockerを使っていれば後から移管するにしても、大きな問題にはならないし、
Dockerが目指しているのはどちらを使えばいいとかではなく、どちらを使ってもDockerが違いを吸収してくれるということだよ。
eBook: https://goto.docker.com/docker-for-the-virtualization-admin.html
つまり、単純に速くなるとかそういうことではないと。
これを踏まえて最近の環境を振り返ってみると、クラウドでバーチャルマシンを使うことがデファクト・スタンダードになっていて(それにはそれなりの理由があって)、Dockerを導入する場合はそのバーチャルマシンにDockerを追加する形になるため、当然オーバーヘッドが増えるのが真実というか事実なのかなという結論に至りました。
Dockerについての最初に説明をよく見直してみると、バーチャルマシンとコンテナの違いを説明しているだけで、盲目的に速くなるとは書いてありませんでしたね。。。 なぜか、私はそう理解しまったのですが、説明が紛らわしいのか、または他の紹介記事はそのように誤った説明だったのかはよく覚えてません。
この件に関して、皆さんはどう理解していたのか、コメントお待ちしてます。
じゃあ、Production環境以外では
ここからはおまけとして、Dockerのいいところ盛りだくさんなところを別の側面から紹介したいと思います。
開発環境として
これは、バーチャルマシンに圧勝していると思います。バーチャルマシンでローカルとは切り離した環境を構築できますが、
OSイメージのダウンロードや起動の重さその他、構築作業が煩雑だったりして、面倒が多いと思います。
その反面、Dockerでは起動が速い、構築作業が自動化されていることでDockerなしの開発は考えられなくなりました。
もちろん、ボリュームを使って永続化する必要があったり、コンテナ間の通信などで最初はハマりましたが。。。
IoT(Raspberry Pi)
最近、Docker communityで盛り上がっている Docker on Raspberry Piですが、こちらもかなりアツいと思っています。
ポイントは:
- Raspberry Pi でDockerネイティブで動作するので、バーチャルマシンより高速で、かつポータビリティが高い
ベアメタルということになるが、SDカードでOSを書き込むだけなので、こちらも再現性が高く復帰やレプリケーションが容易 - 複数繋げたRaspberry PiをSwarmモード(Dockerコンテナをいろいろな構成に展開してオーケストレーションしてくれる)で分散処理できる。
というところです。まだ試してはいませんが、地味に高負荷処理なものをAWS EC2とか使うと高額になってしまうので、Raspberry Piを1万円分くらいまとめ買いして、自宅サーバー構築してみたいと思ってます。
詳細:https://www.raspberrypi.org/blog/docker-comes-to-raspberry-pi/
おわり
初めてのAdvent Calendarで、自分では少し挑戦的な内容にしてみました。指摘やご意見お待ちしております。
来年も良いDocker yearにしたいですね!