遂にちゃんとDockerの勉強を始めた。"Using Docker"という本を読んでる。
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要らんの?とか、そういう話をすればスムーズかなって思う。