プログラムを隔離するとは?
Dockerのコンテナは、他のコンテナから完全に分離されていることは読んだ。
つまりは、中に入れるプログラムも他のコンテナのものとは隔離されている。
Dockerコンテナによってプログラムを隔離することで、相性の悪いプログラムの同居問題の多くを解決できる。
例えば、システムAが〇〇プログラムVer.5を、システムBが〇〇プログラムVer.8を使いたい場合、セットで隔離してしまえば影響を無くすることができる。
通常の環境であれば、1台のPCやサーバには1つしか入れることができないソフトウェアが多い。
普段使いのPCの場合、WordやExcelなどソフトウェアによってはバージョンを変更すれば複数入るケースもあるため、可能であると思いがちだが基本的には不可能である物の方が多い。
しかし、Dockerであれば完全に独立しているので、複数のコンテナに同じバージョンの同じプログラムを入れることができる。
コンテナで複数のサーバ機能を安全に同居させる
Dockerの環境でコンテナを利用することで、完全に隔離することができる。
つまり、Webサーバ、メールサーバ、システムとDBサーバを予算的な都合で同居させているようなものは容量が許す限り別々に隔離して安全に運用することができる。それらは、アップデートしても互いに影響しあうことも無い。
また、通常はサーバマシン1つには1つのWebサーバ (ex.Apache) しか載せる事ができないが、
コンテナ技術を使用することで1つのサーバマシンに複数のWebサーバを作って載せることができる。
また、複数のサーバ機能を1つのマシンに入れることができるのは、サーバマシンの節約にもなる。
例えば社内で、プロジェクトAとB各々で使用しているWebサーバがあったとする。双方がさほど容量を使用しないにも関わらず別々のマシンを用意することはコストの無駄である。この様な場合にはコンテナ技術を使用してサーバを同居させてしまえばよいという選択肢も出てくる。
もし、コンテナ技術を使用せずに同居させるとなると、プロジェクトAのメンバーがBの環境を触ってしまう事故が起こる可能性もあるし、Apacheは1つしか入れられないためWebサーバ機能は共有することになってしまう。コンテナであればこのようなリスクをなくした上で1つのサーバに同居させることができる。
現場で使用される方法としては、開発環境を揃えたり本番環境への移行を容易にするという利点もある。コンテナは隔離されているだけでなく、持ち運ぶことができることも大きな特徴である。
3日目の感想
純粋にサーバ1台で複数のサーバの役割を安全に持たせることができるのは便利すぎるし、コスト削減すぎるという感想。(そもそもの容量にもよるが…)
コンテナ技術をうまく使うことでコストの最適化をしつつコンパクトなアーキテクトでシステム構築ができることは魅力であると思う。
大規模なシステムになるとKubernetesを使用したりして自動化をうまくしていく必要がありそうだが、そこまでの大規模システムでないのであればたとえ手運用の部分があるとしてもコンテナを使ってみたいと思った。
手始めに軽い物。LAMP環境 でも作成するでもよいかなと思った。