コンテナのメリットとデメリット
メリット
ホストOSを汚さない
コンテナは隔離されたプロセス。
ですので、ホストOSを汚すことがありません。
もし、直接ホストOSにソフトウェアをインストールすると、OSの設定の変更が必要だったり、同じソフトウェアでもバージョンが違うと、挙動が変わる場合もあります。
コンテナを使用すれば、ホストOSを汚さずに、干渉しない環境を複数つくることが可能です。
ポータビリティが高い
コンテナは、異なるOSやマシンでも、同じ環境を再現できるので、ポータビリティが高いといえます。
たとえば、開発環境で動いてたアプリが、本番環境だとなぜだか動かないというケースがよくあります。
これは、必要なライブラリが不足していたり、異なるバージョンのライブラリが入っていたりと、環境に差異があるため。
コンテナでは、アプリの動作に必要なライブラリや依存関係をもパッケージ化したものなので、このような環境の差異による不具合をさけることができます。
インフラ構築をコードを用いて実現できる
laCと呼ばれるもので、Infrastructure as Codeの略。
アプリのインフラ構築を、コードを用いて行うことを指しており、そのコードさえあれば、ほかの人が別のマシンでコンテナを簡単に作ることができます。
本来、環境構築には、ソフトウェアをインストールして、設定を変更して、といったいくつもの手順をふまなければならず、他人が同じ環境をつくるには手間がかかるもの。
しかし、コンテナ技術をもちいれば、どんなコンテナをつくるかという手順をまとめたテキストファイルがあるので、それを用いれば、他人でも簡単に、同じ環境の構築をおこなうことができます。
デメリット
学習コスト
コンテナを作成し、実行するだけならば簡単です。
しかし、複数のコンテナを組み合わせたい場合や、本番環境で使用したい場合、コンテナへの深い知識が必要。
大量のコンテナをつかってアプリを作るならば、コンテナ管理をおこなうKubernetes(クーベネティス)のような、オーケストレーションツールのの知識も必要となります。
また、コンテナの技術にはLinuxのnamespaceやcgroupsという仕組みがつかわれているので、深い理解のためには、Linuxの知識も重要です。
ホストOSの差異によっては動作しない場合もある
コンテナにはポータビリティがありますが、コンテナはホストOSのカーネルに依存しているので、ホストOSのバージョン差異や、互換性の有無によっては、別の環境では動作しない場合もあります。
Discussion