とりあえずDockerの何が良いの?1分で教えてよ!

遂にちゃんとDockerの勉強を始めた。"Using Docker"という本を読んでる。

www.safaribooksonline.com

Safari Books OnlineでいくつかDocker関係の本をあさってみて、この本が一番良さそうだと思ったので読み始めたとこ。
玉川さんが翻訳されるそうなので、細かいニュアンスはそちらが出たら確認しようと思ってる。(おい

今しかできない

今日は、まだDockerについて全然詳しくない今だから感じてるDockerのいいなぁって思うところを書き残しておこうと思う。使い慣れてしまう頃にはもう今の感覚はなくなってると思うので。

ゴールは、誰かあんまり調べる気はない人に「Dockerの何が良いの?」って聞かれたときに「色々あるけど、これかな」って手っ取り早く伝えられたらいいかなってとこ。

とりあえずDockerの何が良いの?1分で教えてよ!

アプリのコードをバージョン管理できたー!便利!

でも、サーバーは構築作業とか手作業の積み重ねで管理つらい!

そこで、AnsibleとかChefとかでInfrastructure as Codeですよ。そしたらそのコードをバージョン管理できる!

おー。手元のVagrantでも構築できていいね。

うん。。。いいんだけど、なんかめんどい。なんでだろう?

サーバー全体を管理しようとするからじゃない?

確かに。サーバーは壊して作るとかちょっと面倒くさいなぁ。

じゃあ、例えばRedisを動かしてるサーバーの中で、Redisのために必要な部分と、それ以外の部分(OSとかRedis直接関係ないプロセスとか)を分けて管理したら良くない?

んで、Redisの設定とかの変更をしたときはサーバー全体に対してじゃなくて、その部分だけに対してプロビジョンできたりイメージ保存できたりすると小さく作業できて嬉しい!

あぁ、Redisの部分だけ壊して作るとかだと全然楽かも。それに、Redisの部分だけを気にすればいいのは、関心事が分離できていいなぁ。

いいねー。じゃあ、その部分を「コンテナ」って呼ぶね。で、そのコンテナのイメージを動かすことができるようにしよう。

┏┓
┃┃←Redisの入ったコンテナ
┗┛
┏━━━━━━┓
┃      ┃←コンテナを動かすエンジン
┗━━━━━━┛
┏━━━━━━┓
┃      ┃
┃      ┃←OS
┃      ┃
┗━━━━━━┛

あ、それくらい小さなイメージだったら、リポジトリでバージョン管理してもいくね?OS全部含めたイメージはつらいけど、それくらいなら現実的だよね。

おー。イメージをバージョン管理か。便利だね。

で、それをpullしてきたら、どこでも同じ動きするってことだよね!Immutable Infrastructure だ(∩´∀`)∩ワーイ

という流れでどうでしょうか!

てことで、コンテナからはできるだけ関心外のものが取り除かれて。それを動かすエンジンがあって。その辺りを全部ひっくるめて、Dockerという一つのプラットフォームみたいなものがある。という感じで説明したら良さそうかな。

「あぁ、良さそうね」ってなってから、その後に、起動が速いよとか、DockerHubがあるよとか、Virtual Machineとどう違うの?とか、Vagrant要らんの?とか、そういう話をすればスムーズかなって思う。