Dockerを利用した感想

今更ながら、Dockerを使ってみました。

 

仮想マシンを利用していた頃

Dockerを利用する前は、仮想マシン(KVM、lib-virt)で仮想マシンを立てて、その上にWebシステム(Redmine、GitLab etc...)を動かしていました。仮想マシンは、ホストマシンに左右されない環境なので非常に環境の構築が簡単でした。

しかし、Webシステムの数が増えると仮想マシンも増え、管理する対象が増える結果となります。それぞれにOSが入っているので、それらの更新を行う必要があり、とても煩雑でした。

また、それぞれでOSが独立して動いており、ホストマシンのリソースを多く消費するという点もあります。

もちろん、一つの仮想マシンにWebシステムを集約する方法もありますが、Webシステムそれぞれが持つ依存関係に注意する必要があり、集約は容易ではありません。

なぜ、Dockerを利用したのか?

第一に、仮想環境の冗長なOS部分を排除できるという点です。Dockerはコンテナ型の仮想環境なので、ホストマシンのカーネルを利用し動くことでこうした問題を解決しています。

第二に、システムの構築が比較的容易であった点です。DockerはDocker image(仮想環境の雛形)を配布、受け取る仕組みを提供しており、コマンドを数回叩くことでRedmineやGitLabなどの導入が難しい環境の構築が半自動的にできます。

第三に、コンテナ同士の連携が簡単であった点です。コンテナ同士の連携は、linkやportのオプションを用いることで、簡単に連携できます。例えば、gitlabとredmineとで一つのmysqlを共有することも可能です。コンテナ同士の依存性をネットワークレベルにしたのは素晴らしい判断だと思います。

Dockerはコンテナ型としての魅力だけでなく、構築の容易さと独立性と依存性のバランスの取れた仕組みだと感じました。

 

Dockerのデメリット

Dockerのデメリットは、カスタマイズが容易ではない点です。設定項目が多いDocker imageが配布されていればいいですが、そうでなければ自分でDockerfileを作る必要があります。もちろん、コンテナを直接触って調節するのも良いですが、それではDockerのメリットが薄れてしまいます。

 

巷では、Dockerを用いることで楽に環境を構築できると考えている人もいますが、ある程度システム構築を経験している人でなければ構築が困難な場面が出てきます。逆に、下手な手を打つとDockerのメリットを薄めることとなり、仮想マシンと変わらない結果になってしまいます。

Dockerは単なるコンテナ型の仮想環境ではなく、構築の半自動化、依存関係と独立性をバランスよく実現できる仕組みだと、私は思います。