AnsibleずDocker、なぜそしおなぜ

DockerずAnsibleの技術コミュニティには非垞に倚くの関心が寄せられおいたす。この蚘事を読んだ埌も、この関心を共有しおください。 たた、Railsアプリケヌションのサヌバヌず環境をセットアップする際に、AnsibleずDockerの実甚的なアプリケヌションのスキルを習埗したす。



「Herokuを䜿甚するだけではどうですか」ず尋ねたす。

たず第䞀に、DockerずAnsibleは、あらゆるホスティングプロバむダヌのあらゆるマシンで実行できたす。 第二に、利䟿性よりも柔軟性を奜みたす。 同様に、Webアプリケヌションだけでなく、䜕でも実行できたす。 そしお最埌に、私は私の魂の䞭で実隓者なので、それがすべお䞀緒に機胜する方法を理解するこずを楜しんでいたす。 Herokuの基本的な基盀は、Linuxコンテナヌです。 同じテクノロゞヌがDockerの䞭栞にありたす。 実際、Dockerのモットヌの1぀は「コンテナヌ化は新しい仮想化です」です。



なぜAnsibleなのか



Chefを4幎間積極的に䜿甚した埌、コヌドずしおのむンフラストラクチャは非垞に退屈になりたした。 むンフラストラクチャを管理するコヌドにより倚くの時間を費やしたしたが、むンフラストラクチャ自䜓には費やしおいたせん。 どんな小さな倉曎でも、わずかな利益のために倚くの努力が必芁になりたす。



Ansibleでは、䞀方でむンフラストラクチャを蚘述するデヌタがあり、他方で他のコンポヌネントの盞互䜜甚間に制限がありたす。 このモデルははるかに単玔で、はるかに速く移動できるため、私のむンフラストラクチャの実行内容に集䞭できたす。 Unixモデルず同様に、Anisibleは、無限の方法で組み合わせるこずができる単䞀の責任モゞュヌルを提䟛したす。



AnsibleにはPythonずSSH以倖の䟝存関係はありたせん。 圌女は、リモヌトマシンに゚ヌゞェントをむンストヌルする必芁はありたせん。䜜業埌にゎミを残したせん。 さらに、クラりドのパッケヌゞマネヌゞャヌからデヌタベヌスたで、すべおを管理するためのモゞュヌルの暙準ラむブラリが付属しおいたす。



なぜDockerなのか



Dockerは、プロセスをマシンにデプロむする最も信頌性が高く䟿利な方法ずしお䜍眮付けおいたす。 mysqldからredisたで、Railsアプリケヌションで終わるものであれば䜕でもかたいたせん。 gitスナップショットおよびコヌド配垃ず同じ効率的な方法で、Dockerはプロセスでも同じこずを行いたす。 このプロセスを実行するマシンに関係なく、このプロセスを開始するために必芁なすべおのものが提䟛されるこずが保蚌されたす。



DockerコンテナずVMを比范する䞻な、しかし理解できる間違い。 唯䞀の責任の原則がここに適甚されたす;コンテナごずに1぀のプロセスを開始するず、倉曎可胜性ずサポヌトが簡単になりたす。 このモデルは、Unixの哲孊で時の詊緎に耐え、アクションの匷固な基盀を提䟛したす。



カスタマむズ



タヌミナルを離れるこずなく、AWS、Linode、Rackspace、たたはDigitalOceanのいずれかのホスティングサヌビスでAnsibleからカスタマむズされたマシンを取埗できたす。 具䜓的には、Ansibleを䜿甚しお、Amsterdam 2リヌゞョンのDigitalOceanに2 GBのメモリを持぀新しいドロップレットを1分25秒で䜜成したす。 さらに1分50秒間、Dockerおよびその他の蚭定でカスタマむズされたシステムを取埗できたす。 基本システムができたので、アプリケヌションをデプロむできたす。 プログラミング蚀語たたはデヌタベヌスを構成しなかったこずに泚意しおください。 Dockerはこれを自分で凊理したした。



Ansibleは、リモヌトマシン䞊でSSHを介しおすべおのコマンドを実行したす。 ロヌカルssh-agentにある私のSSHキヌは、Ansible SSHセッションを通じおリモヌトで共有されたす。 リモヌトマシンで、アプリケヌションのコヌドが耇補されるか、gitでの認蚌にデヌタが䞍芁な堎合、ロヌカルマシンから転送されたssh-agentが認蚌に䜿甚されたす。



Dockerずアプリケヌションの䟝存関係



ほずんどの開発者は、カヌネルのバヌゞョン、Pythonのモゞュヌル、Ruby gem、たたはアプリケヌションに必芁なnode.jsモゞュヌルを正確に瀺しおいるのに面癜いず思いたすが、デヌタベヌスサヌバヌやキュヌサヌバヌなどの重芁なこずになるず、それを䜿甚したす珟時点で利甚可胜なもの。 これがDevOps運動の理由の1぀だず思いたす。開発者は、アプリケヌションを実行する環境に責任を負いたす。 Dockerは、既存のプラクティスに実甚性ず自信を少し加えるこずで、このタスクをより簡単にしたす。



私のアプリケヌションは、 .docker_container_dependencies



ファむルを含むMySQL 5.5やRedis 2.8などのプロセスぞの䟝存関係を定矩しおいたす

 gerhard/mysql:5.5 gerhard/redis:2.8
      
      







Ansibleプレむブックはこのファむルを参照し、Dockerに画像のむンデックスから正しい画像を取埗しおコンテナヌずしお実行するように指瀺したす。 たた、これらのコンテナはアプリケヌションのコンテナにリンクされおいたす。 コンテナリンクの操䜜に関する詳现情報が必芁な堎合は、Docker 0.6.5の発衚をご芧ください。



私のアプリケヌションには、Ruby Dockerむメヌゞに固有のDockerfileも付属しおいたす。 むメヌゞがむンストヌルされるず、Dockerfileの手順により、正しいバヌゞョンのRubyがむンストヌルされたす。



 FROM howareyou/ruby:2.0.0-p353 ADD ./ /terrabox RUN \ . /.profile ;\ rm -fr /terrabox/.git ;\ cd /terrabox ;\ bundle install --local ;\ echo '. /.profile && cd /terrabox && RAILS_ENV=test bundle exec rake db:create db:migrate && bundle exec rspec' > /test-terrabox ;\ echo '. /.profile && cd /terrabox && export RAILS_ENV=production && rake db:create db:migrate && bundle exec unicorn -c config/unicorn.rails.conf.rb' > /run-terrabox ;\ # END RUN ENTRYPOINT ["/bin/bash"] CMD ["/run-terrabox"] EXPOSE 3000
      
      







最初のステップは、アプリケヌションのすべおのコヌドをDockerむメヌゞにコピヌし、前のむメヌゞによっお远加されたグロヌバル環境倉数をロヌドするこずです。 たずえば、Ruby DockerむメヌゞはパスをPATHに远加しお、正しいバヌゞョンのRubyを正しくロヌドしたす。



次に、このコンテキストでは必芁ないため、git履歎を削陀したす。 すべおのgemをむンストヌルしおから、テスト専甚に実行される/ test-terraboxファむルを䜜成したす。 このすべおの目的は、アプリケヌションずそのすべおの䟝存関係をチェックする「カナリア」バヌゞョンを甚意し、アプリケヌションを実際に起動する前に、すべおのDockerコンテナが正しくリンクされ、すべおのテストが正垞に合栌するこずです。



新しいコンテナの起動時に呌び出されるコマンドは、CMDステップで定矩されたす。

start / run-terraboxコマンドは、テスト実行プロセスの盎埌に、ビルドプロセスの䞀郚ずしお定矩されたす。



Dockerfileの最埌の呜什は、ポヌト3000をDockerコンテナヌ内からDockerが実行されおいるホストマシンに転送したす。 サヌバヌたたはロヌドバランサヌがコンテナアプリケヌションぞのリク゚ストをプロキシするために䜿甚できるもの。



Dockerコンテナヌ内でRailsアプリケヌションを実行する



箄100個のgemず倚くの統合テストがRailsの䞋から実行される平均的なRailsアプリケヌションの堎合、ロヌカルDockerむメヌゞなしで2GBず2基の原子力マシンで実行するには8分16秒かかりたす。 このマシンにすでにRuby、Mysql、およびRedisのむメヌゞがある堎合、4分45秒かかりたす。 さらに、アプリケヌションの参照むメヌゞが既にある堎合、2分23秒かかりたす。 遠近法で芋るず、MySQLやRedisなどの䟝存関係を含む新しいRailsアプリケヌションのデプロむには2分しかかかりたせん。



たた、アプリケヌションの展開には、゚ンドツヌ゚ンドで1分かかるすべおのテストの起動が含たれるこずにも泚意しおください。

誇匵するこずなく、Dockerは継続的な統合の単玔な手段になりたす。テストが倱敗した堎合、たたはテストに合栌したずきに新しいアプリケヌションコンテナヌが最新バヌゞョンで起動した堎合、Dockerは研究甚のテストコンテナヌのみを予玄したす。 突然、お客様に新しいコヌドを数分で確認できたす。これにより、オペレヌティングシステムレベルでアプリケヌションの他のバヌゞョンから隔離されるこずが保蚌されたす。 数分でロヌドする埓来のVMずは異なり、Dockerはこれに数秒を費やしたす。 さらに、Dockerむメヌゞを䜜成し、アプリケヌションの特定のバヌゞョンのすべおのテストに合栌したこずを確認したら、そのむメヌゞをプラむベヌトレゞストリにアップロヌドし、Dockerを備えた他のマシンでロヌドしお、新しいコンテナヌずしお起動できたす。これらすべおを数秒で。



おわりに



Ansibleにより、むンフラストラクチャ管理プロセスを再確認できたした。 Dockerは、最も重芁な開発ステップの1぀である配信フェヌズに関しお、自信ず安定性を䞎えおくれたした。 組み合わせお、それらは比類のないです。



完党にカスタマむズされたRailsアプリケヌションをれロからわずか12分で取埗するこずは、どの暙準でも印象的です。 基本的な継続的むンテグレヌションシステムを無料で入手できたす。アプリケヌションのさたざたなバヌゞョンを䞊べおプレビュヌできたす。同じマシンで実行されおいる「動䜜䞭」バヌゞョンに圱響を䞎えず、非垞に匷力です。 それは私を喜ばせ、蚘事の終わりに達するず、あなたが私の喜びを私ず分かち合うこずを望むだけです。



All Articles