プログラミング初心者がアーキテクトっぽく語る

見苦しい記事も多数あるとは思いますが訂正しつつブログと共に成長していければと思います

コンテナ技術のメリット

ソフトウェアの実行環境には以下の3つの選択肢がある。

ソフトウェアになんらかのハードウェア制約がなければ仮想マシンかコンテナ上にデプロイするのが一般的だ。

では仮想マシンとコンテナのどちらが適切かどのように判断すればよいのだろうか?

流行に流されてコンテナを選ぶこともあるだろう。そんな場合でも技術的な理由付けができるようになっておきたい。

ここでは仮想マシンと比較しながらコンテナを採用するメリットを考える。


メリット

1. 起動が早い

  • 仮想マシンと違ってOSから起動する必要がないので起動が早い

2. イメージが軽い

  • OS部分がないので小さなイメージで済む
  • 環境の移動も楽

3. 処理が少し早い

  • 仮想化レイヤのクッションが入らない分、全般的に処理が早い

デメリット

1. OSが選べない

2. カスタマイズ性が低い

  • OSレベルのチューニングなどは実施できない

3. HW障害やHW交換に弱い

  • Live Migration機能やHA機能がない
  • このデメリットは仮想マシンと組み合わせることで克服できる

4. ロールバック機能がない

  • このデメリットは仮想マシンと組み合わせることで克服できる

考察

結論としては以下の場合を除けばコンテナを選択するのが順当である。

  • Linux以外のOSを利用する場合
  • Linuxを利用するがOSレベルのチューニングが必要な場合

コンテナのデメリットの多くは仮想マシンと組み合わせることで回避できる。よって物理サーバ上で直接コンテナを実行せずに仮想マシン上でコンテナを実行することを検討に含めるべきだ。

その場合、仮想マシンの実行速度に足を引っ張られてしまい「処理が早い」というコンテナのメリットは失われてしまう。しかし「交換しやすい」というメリットは残る。処理性能と交換可能性のバランスを考えて選択することだ。交換可能性が重要視されるシステムとしては以下のようなものが考えられる。

  • マイクロサービスアーキテクチャを採用したシステム
  • CI/CDをブンブン回すシステム