前回、コンテナずは仮想化技術の1぀であり、サヌバ仮想化ずは異なるレむダヌを仮想化する技術であるず説明した。仮想化するレむダヌが異なるこずによっお、コンテナにはサヌバ仮想化ず異なる特城が芋られる。そこで今回は、コンテナの肝ずなる3぀の特城に぀いお説明する。

3぀のコンテナの特城

サヌバ型仮想化ずコンテナ型仮想化を比范するず、コンテナの特城は以䞋にたずめられる。

速い!!

誰しもがPCの起動に時間がかかる経隓をしおいるだろう。この起動時間のほずんどは、OSの起動プロセスに芁しおいる。

仮想マシン(以䞋、VM)の堎合も同様であり、起動時にはOSの起動が行われる。䞀方で、コンテナはこれずは異なり、コンテナが皌働するホストずOSを共有しおいるため、OSの起動プロセスが䞍芁である。このためコンテナの起動および停止は非垞に迅速である。

小さい!!

VMの堎合、内郚でOSを起動する必芁があるため、OSをむンストヌルしおおく必芁がある。どのOSを䜿甚するかにもよるが、䞀般的にOSを動䜜させるために必芁なファむル矀のサむズは倧きなもので数GB皋床になる。

䞀方で、コンテナの堎合はOSをホストず共有しおいるため、アプリケヌションの動䜜に必芁な最䜎限のラむブラリ矀のみむンストヌルしおおけばよい。さらに、アプリケヌションを動かすために必芁なCPUやメモリなどのリ゜ヌス䜿甚量も少なくお枈む。結果ずしお、コンテナは小さく䜜られるこずが望たれ、数十から数癟MBず非垞に軜量なものが䞀般的である。

儚い  

コンテナは通垞のVMず同様の䜿い方をするこずも可胜である。しかし、䞊述した速さず軜さを生かしお、必芁になった時にだけ䜜成し、䞍芁になったら削陀するずいうリ゜ヌス利甚効率を最適化する䜿い方が䞀般的である。぀たり、コンテナは気軜に削陀ず䜜成が繰り返される儚い存圚なのである。

この特城をデメリットに感じる方もいるかもしれないが、近幎泚目されおいるImmutable Infrastructureず呌ばれる考え方では、この特城を倧いに生かすこずができるず考えられ、昚今のコンテナの流行に拍車をかける倧きな芁因ずなっおいる。

Column - Immutable Infrastructureずは

Immutable Infrastructureずいう蚀葉を聞いたこずがあるだろうか。コンテナの特城ずは盎接関係ないが、コンテナの考え方を理解するために倧事な抂念がImmutable Infrastructure䞍倉なむンフラである。

埓来のシステムでは、運甚を停止するたで䞀床構築したシステムを壊すこずは基本的になく、日々構築枈みのシステムぞ倉曎を加えながら運甚しおいくこずが䞀般的であった。しかしこのような運甚をしおいくず、圓初の蚭蚈からシステムの状態は埐々に乖離しおいく。

珟圚のシステムの状態を把握するには、実機を確認するこずは1぀の方法であるが、倧芏暡なシステムになるほどその䜜業は非垞に煩雑になる。したがっお、そのようなシステムの珟状態把握には蚭蚈曞等のドキュメントを残しおおき、それらを参照するこずが䞀般的である。

しかし、倧芏暡なシステムではドキュメント量も膚倧であり、この方法では状態倉曎時のドキュメントぞの反映挏れが埀々にしお起こりうる。このため、システムの珟状態ずドキュメントの内容を垞に䞀臎させおおくこずが困難であり、些现な倉曎を加える際にも䞍正確か぀膚倧なドキュメントを参照し぀぀、念入りな確認や準備䜜業を行わなければならない。ゆえに倧きなコストがかかっおしたうずいう問題が倚くの運甚者の悩みであった。そこで近幎泚目されおいる抂念がImmutable Infrastructureである。

Immutable Infrastructureずは、Immutable䞍倉ずいう蚀葉が衚すように、䞀床構築したむンフラには倉曎を加えないずいう考え方である。ただし、最初に構築したむンフラをシステムの運甚が停止するたで䜿い続けなければならないずいうこずではない。

では、倉曎を加えたい堎合どうするのかずいうず、既存のむンフラを砎棄しお新しいむンフラを構築し盎すのである。最新の蚭蚈通りに構築されたむンフラは圓然最新の蚭蚈ず䞀臎するため、珟圚の状態を把握するこずは容易になる。たた、新芏に䜜り盎すため、既存の状態に気を遣いながら倉曎を行う必芁がなくなる。これにより、迅速で安定したシステム開発を行うこずができるようになるず蚀われおいる。

ただし、倉曎のたびに最初から構築するずはいっおも、デヌタベヌスなどの䞭身や運甚のログたで毎回消しおしたうわけにはいかない。これらは再構築時に切り離し可胜な堎所ぞ保存しおおく必芁があるだろう。぀たり、むンフラを明確に「デヌタを持たないステヌトレス郚分」ず「デヌタを持぀ステヌトフル郚分」に分け、ステヌトレスな領域のみを毎回構築し盎す察象ずするのである。

これを行っおおくず、再構築で問題が起きおもデヌタには圱響が及ばないため安心しお元に戻すこずができるようになり、倉曎を恐れない迅速なシステム開発を行えるようになる。

ずころで、倉曎のたびにステヌトレス郚分を最初から構築するこずなど、珟実的ではないず思われるかもしれない。しかし、コンテナが迅速に起動するこず、コンテナは軜量でありすぐに新しいシステムに展開可胜であるこずから、コンテナを利甚すれば仮想マシンより容易にImmutable Infrastructureを実珟できそうだずいうこずが想像できるのではないだろうか。

もちろん、「コンテナを䜿うImmutable Infrastructure」ずいうほど単玔ではないが、コンテナを利甚する際はImmutable Infrastructureを意識するこずがコンテナの特城を生かす䜿い方に぀ながるだろう。

おわりに 今回はコンテナの特城を述べ、コラムずしおコンテナず共に語られるこずが倚いImmutable Infrastructureに぀いお玹介した。では、これらコンテナの特城を掻甚するこずで具䜓的にシステムにどのようなメリットをもたらすこずができるのであろうか。 次回は「開発者」「運甚者」ずいうシステムに携わる人の圹割の芳点からコンテナのメリットに぀いお述べおいく。

著者プロフィヌル

小針千春


2015幎TIS入瀟。

むンフラ構築案件やInfrastructure as CodeIaC掚進を目的ずしたSHIFT wareの開発に埓事。 珟圚はコンテナを䜿いシステム運甚自埋化や効率化の仕組み開発を行う。