Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Vagrant, Ansible, そして Docker ~ 俺達の戦いはこれからだ! ~

Vagrant, Ansible, そして Docker ~ 俺達の戦いはこれからだ! ~

1) 残念タイトル

2) @smagchとは。在宅で働いてるフリーランスのプログラマ。ほぼ開発を生業。メインでJavaScript(もともとActionScript, Java)少しPHPもする。今春、旭川の勉強会でComposerについて発表(http://www.slideshare.net/shimaguchi/compose )。以上より、VagrantやDockerに関して理解が深くはない。ほとんどない。このスライド、たぶんバグ満載。あらかじめ、ごめんなさいをしておいて、ハードルを下げる。というか、発表まで時間があったし、実務でも使っているので物凄いテクニカルな発表ができるという見込みをしていましたが、物臭な性格がボトルネックになるということを見込みを入れていなかったことが災いしましたぁ。

3) Vagrant。ローカルにVM立ち上げて、同じ環境で開発しようよ!って感じ?(たぶん)。ローカルにLinuxをいれて、プロダクションと同じ環境で開発するということ。ドットインストールとかにも授業あるくらいだから、Vagrantはかなりポピュラーなはず。

4) Vagrantといえば・・・、英語だと同意味でしたっけ?浮浪者?

5) 公式サイトのスクリーンショット

6) 公式サイトのデザインがカッコイイ。ここで勘の良い人がいれば気付くはず。

7) 公式サイトのデザインがカッコイイ。Rubyのオープンソースプロジェクトのサイトってデザインいいですよね。

8) 現在、HerokuにデプロイしてるWebアプリの開発例。その他エピソードのお話(オフレコ)

9) かなり適当な例(Vagrantfile)。Rubyシンタックスだよね。そのままRubyって感じ。

10) Chefって?今の開発ではChef使ってますね。

11) Chefは、PuppetとかAnsibleとかの仲間。Puppet, Ansible, Chefとか最近、良く聞きますよね。ただ、僕は開発屋なんで、あんまりピンとこない・・・・。

12) Ansibleって?Chef, Puppetとかの(ry

13) サーバーのシステムは、アプリの根本だから、基本的にはバージョンコントロール&テストしなきゃ。僕じゃあ、うまく説明できないので最近読んだブログから名言を拝借する。人前で英語でスピーチできるようになりたいから、ちゃんと英語を読む(試練)。

14) 要するに、サーバーの状態を保存するってことなんでしょうか?ソフトのインスコ・アプデ、プロセス管理、各種コンフィグ(nginx.conf, httpd.conf, php.ini, my.cnfなど)。今の開発では、チームの他の人が書いてくれているので、僕はあんまり知らないんだよね。コンフィグ類はちゃんとGitでバージョン管理してますよ。

15) (Ansibleを割愛して)ここで開発環境の紹介

16) ご覧のとおり、iTerm2とSublimeText2というシンプル構成で開発してます。ここで、勘の良い方は気付くはずですが、ご覧の画面に重大な問題箇所があります。10秒か、1分くらい考えてもらう。

17) メモリが腹9分目を超えてる(Vagrantは4GBのMacBook Airではキツイ)<= コレ結論。

18) Docker。Vagrantはメモリがキツイので、もっと効率的なのないの?ということでDockerの登場。鯨がコンテナ運んでいる可愛いゆるキャラ。

19) Dockerって何ぞ?lxcのハイレベルラッパー(正確じゃない表現)。フランス人のHacker達が集うdotCloudの人達が始めた今一番クールなオープンソースプロジェクト。

20) README.mdには、"Unlike traditional virtualization, containerization takes place at the kernel level"、「伝統的な仮想化、と違ってコンテナ化はカーネルレベルで行われる」。コンテナ化って何ぞ?

21) こんな感じ(公式の絵をひっぱってきただけ)。Apacheとかemacsをインスコする部位は"Image"、DebianとBusyBoxも"Image"。カーネルは共有。

22) DebianはBase Image。

23) Dockerfileの例。Vagrantの場合は、まんまRubyだったけど、Dockerfileの場合はシンプルなDSL。

24) Vagrant/Docker間での比較。Vagrantでは、"Box", "Provisioning"みたいな言葉を使ってたけど、Dockerの場合は、"Base Image", "Image", "Container"ってキーワードが出てくる。なんとなく解説。ちなみに、VagrantはVagrantfile書くの必須だけど、Dockerの場合はただのコマンドなので、Dockerfile書かなくても使えます。

25) Docker(のバージョン)が0.8になると、lxc依存でなくなり、BSDとかでも動くようになる計画らしい。Red HatのOpenShiftとコラボも開始した。今はUbuntuしかサポートされてないけど、近いうちにRedHat系のLinuxでも動くのかなぁ?

26) Dockerの他に似たやつ(lxcとか使ってるの)。googleのlmctfyとか、cloudfoundryのwardenとか。僕はその辺について、全くわかりません!ごめんなさい。誰か教えてください。

27) 開発でPaaSを使ってる身としては、Dockerの将来に期待。DockerサポートするPaaSが沢山になりそうな予感。今の開発ではVagrant+Chefだけど、デプロイ先PaaSがDockerがOKなら、Vagrant+Dockerで開発してみたい。Dockerの開発速度が速すぎワロス。借りてるVPSはAnsibleを使いたい;理由は(ry。僕はあんまり詳しくないのだけれど、北見の大学生の前でどうしても、すごいHotなオープンソースプロジェクトであるDockerの話をしたかった。ものすごい数の、物凄いエンジニアたちが、物凄い勢いで開発している。ちなみに、僕の好きなGoで開発されてる。

Transcript

  1. Vagrant, Ansible ͦͯ͠Docker ʙ Զୡͷઓ͍͸͜Ε͔Βͩʂ ʙ @smagch ౡޱ஌໵

  2. @smagchͱ͸ ࡏ୐Ͱಇ͍ͯΔϑϦʔϥϯεͷϓϩάϥϚ ΄΅։ൃΛੜۀ ϝΠϯͰJavaScriptʢ΋ͱ΋ͱActionScript, Java) গ͠PHP΋͢Δɻࠓय़ɺѴ઒ͷษڧձͰ Composerʹ͍ͭͯൃදʢhttp:// www.slideshare.net/shimaguchi/compose) Ҏ্ΑΓɺVagrant΍Dockerʹؔͯ͠ཧղ͕ਂ͘ ͸ͳ͍ɻ΄ͱΜͲͳ͍ɻ

    ͜ͷεϥΠυɺͨͿΜόάຬࡌ
  3. Vagrant ϩʔΧϧʹVM্ཱͪ͛ͯ ಉ͡؀ڥͰ։ൃ͠Α͏Αʂ ͬͯײ͡ʁ ʢͨͿΜʣ

  4. Vagrantͱ͍͑͹

  5. None
  6. ެࣜαΠτͷσβΠϯ͕ ΧοίΠΠ

  7. ެࣜαΠτͷσβΠϯ͕ ΧοίΠΠ Ruby

  8. ݱࡏ͍ͯ͠Δ։ൃͷྫ - Ubuntu LucidͷϘοΫε - ChefͰapt, git, rubyΛprovision - ޙ͸shellͰprovisoning,

    foreman౳Πϯεί - ͦΜͰHerokuͷBuildpackͷcompileΛ࣮ߦ ʢͦͷ··HerokuʹσϓϩΠग़དྷΔʣ
  9. ͔ͳΓద౰ͳྫ Vagrant.configure("2") do |config| config.vm.box = "lucid64" config.vm.box_url = "http://files.vagrantup.com/lucid64.box"

    config.vm.network "private_network", ip: "192.168.50.4" config.vm.network "forwarded_port", guest: 3000, host: 8080 config.vm.provision :chef_solo do |chef| chef.add_recipe "git" end config.vm.provision :shell, inline: “echo Hello, World” end end
  10. Chefͬͯʁ

  11. Chef͸ɺ Puppetͱ͔Ansibleͱ͔ͷ஥ؒ ʢͨͿΜʣ

  12. Ansibleͬͯʁ Chef, Puppetͱ͔ͷ(ry

  13. http://devopsu.com/blog/ansible-vs-shell-scripts/ Most engineers would laugh at a company that had

    zero tests and didn't version control or even backup their code. But that's exactly what many companies do with their systems. And these businesses often don't realize the astronomical risks and costs of this neglect. Your server systems are the underlying foundation of your application. They are basically the "app" that your app code runs on. As such, your systems should be version controlled and tested. ଟ͘ͷΤϯδχΞ͕ɺςετέʔε΋όʔδϣϯίϯτϩʔϧ΋ແ͠Ͱɺߋʹ͸όοΫ Ξοϓ΋͠ͳ͍ձࣾΛস͏͠ΐɻ͚Ͳଟ͘ͷձ͕ࣾਖ਼ʹಉ͜͡ͱΛͯ͠ΔΜͩΑɻ ΈΜͳؾ෇͔ͳ͍͚ͲɺςϥϦεΫߴ͍Α αʔόʔͷγεςϜ͸ɺΞϓϦͷࠜຊ͔ͩΒɺ جຊతʹ͸όʔδϣϯίϯτϩʔϧˍςετ͠ͳ͖Ό
  14. ཁ͢Δʹ αʔόʔͷঢ়ଶΛอଘͬͯ͜ͱʁ ιϑτͷΠϯείɾΞϓσ ϓϩηε؅ཧ ֤छίϯϑΟά ʢ։ൃνʔϜͷ୭͔͕ॻ͍ͯ͘ΕͨͷΛ࢖ͬͯΔ͚ͩͳͷͰɺৄ͘͠ͳ͍ʣ

  15. ͜͜Ͱ ։ൃ؀ڥͷ঺հ Ansibleͷ߲ΛׂѪͯ͠

  16. None
  17. ϝϞϦ͕ෲ̕෼໨Λ ௒͑ͯΔ Vagrant͸4GBͷMacBook AirͰ͸ΩπΠ

  18. Docker

  19. DockerͬͯԿͧʁ lxcͷϋΠϨϕϧϥούʔ ʢਖ਼֬͡Όͳ͍දݱʣ

  20. README.mdʹ͸ Unlike traditional virtualization, containerization takes place at the kernel

    level ఻౷తͳԾ૝Խͱҧͬͯɺ ίϯςφԽ͸ΧʔωϧϨϕϧͰ ߦΘΕΔ
  21. ͜Μͳײ͡

  22. ͜Μͳײ͡

  23. ྫ ʢެ͔ࣜΒͦͷ··εϚιʣ # DOCKER-VERSION 0.3.4 FROM centos:6.4 # Enable EPEL

    for Node.js RUN rpm -Uvh http://download.fedoraproject.org/pub/ epel/6/i386/epel-release-6-8.noarch.rpm # Install Node.js and npm RUN yum install -y npm # Bundle app source ADD . /src # Install app dependencies RUN cd /src; npm install EXPOSE 8080 CMD ["node", "/src/index.js"]
  24. Dockerfile Vagrantfile Box Base Image Image & Container Provisioning ˎDockerfileͳͯ͘΋docker͸͍Ζ͍Ζ࢖͑Δ

  25. Docker 0.8ʹͳΔͱlxc(Linux)ґଘͰͳ͘ɺ BSD(Jails), Solaris(Zones)౳ɺԿͰ΋͟͝Ε Red HatͷOpenShiftͱίϥϘ։࢝ http://blog.docker.io/2013/09/red-hat-and-docker-collaborate/ http://blog.docker.io/2013/08/getting-to-docker-1-0/

  26. Dockerͷଞʹࣅͨ΍ͭ google/lmctfy https://github.com/google/lmctfy/ cloudfoundry/warden https://github.com/cloudfoundry/warden

  27. ݁࿦ ։ൃͰPaaSΛ࢖ͬͯΔ਎ͱͯ͠͸ɺDockerͷকདྷʹظ ଴ɻDockerαϙʔτ͢ΔPaaS͕୔ࢁʹͳΓͦ͏ͳ༧ײ ࠓͷ։ൃͰ͸Vagrant+Chef͚ͩͲɺσϓϩΠઌPaaS͕ Docker͕OKͳΒɺVagrant+DockerͰ։ൃͯ͠Έ͍ͨ Dockerͷ։ൃ଎౓͕଎͗͢ϫϩε आΓͯΔVPS͸AnsibleΛ࢖͍͍ͨʀཧ༝͸(ry