Containerization
目的
コモディティ化。つまり、差を無くしどこでも動作するようにする。
オペレーティングシステム、物理マシン、仮想マシンからアプリケーションを抽象化する。(クラウドファーストでありながら、オンプレでの利用もできる)
小さい容量、高速、移植性(どこでも動作)、簡易インストール
コンセプト
コンテナのプロセス・ネットワークが個別に隔離・分離されている。つまり、別のコンテナとは依存関係が無い。
仮想化からコンテナ化へ
ハードウェアに依存
CPUに依存してアプリケーションを開発する必要があり、異なるCPU上では動作しなかった。
言語とコンパイラ
コンパイラがC言語のような人にわかるコードをマシンの命令に自動的に作成。
いろんなコンピューター上で動作ができるようになった。
ただし、アプリケーションを動作させるのには、高価な物理的なハードウェアが必要。
仮想化とハイパーバイザー
一台の物理ハードウェア上で、より効率的に動作させる
一台の物理ハードウェア上で、複数の仮想マシンを動作させる
ハードウェア購入、納品の時間や物理的なスペースも減らすことができる
ただし、アプリケーションを動作させるのには、その条件にあった環境(OS≒仮想マシン)がそれぞれに必要。
コンテナ化
さらなる効率化が求めらる
OSからアプリケーションの抽象化
一つのOS上で、複数のアプリケーション動作環境を実現する。
用語
Untitled
どのように動くの?
一つのバンドルにパッケージ化されたもの
コードとそのアプリケーションが動作するのに必要な環境が一つになっている
完全なOSは必要としない
メリット
- 実行の一貫性
- どんな環境(インフラストラクチャー上)でも同じように動く
- 開発・テストにおいても有効
- 動作しないときも同様 ≒ 再現がベンダーのサポート側でも可能であり、問題の解決につながる
- ハードウェア・ソフトウェアの両方に対する柔軟性
- 動作環境も含めてパッケージ化されているので、コンテナ化されたアプリケーションは、ハードウェアとオペレーティングシステムのさまざまな組み合わせで実行することができます。
- インフラストラクチャーのライセンスや運用のコストが、効率化される。(動作環境の自由な選択)
- ベンダー側がイメージに含まれるものを管理することで安定させる
- 別のアプリケーションとの相性・干渉にて、クラッシュすることもある(コンテナの場合は分離されているのでサードパーティーのアプリケーションの影響を受けない)
- セキュリティの向上
- アプリケーションがお互い分離されている
- コンテナが侵害されても他のコンテナは影響を受けない
- コンテナ自体を保護するものも多くなってきている
- コンテナ化する際にベンダーがセキュリティ強化を含めて計画
- 迅速にパッチを適用することができる
- 物理ハードウェアの使用の効率性
- 仮想ネットワークとなり、物理的なネットワークの複雑性は軽減
- 一つのオペレーティングシステム上で複数のコンテナが動作するため、ハードウェアを効率的に共有(CPUとメモリの総合的な需要を抑えることができる)
- 必要なものだけパッケージする かつ 共通して利用するものはレイヤリング(読み込み専用のレイヤ<イメージレイヤ>)して共通利用する。(変更は、コピーオンライト<書き込み処理が発生したときにはじめて複製する>する)→より小さい領域のみ利用する
- 容量少ない 例)仮想マシン30GB ⇔ コンテナ・イメージ10~100MB
- プロセス少ない→CPUやメモリの要件が少ない
- 効率的なコンテナ管理→インフラストラクチャーの利用低減→電力の低減(運用経費・カーボンフットプリントの向上<CO2排出量削減>)
- インストールやアップグレードの手順の効率化
- 起動は一つのコマンドや一つのファイルの書き込みで完了(様々なツールで管理する必要なし)
- 分離・簡素化・予測可能性があるため、シンプルにアプリケーションを提供
- アップグレードも起動とどうように一つのコマンドやファイルで可能
- Blue Prismを現時点でもダウンタイム無しにアップグレードすることもできるが、困難
部門別のメリット
カスタマーサポート
クラウドオペレーション
品質保証
エンジニア
営業
-
スクリプトによるインストールで差異を無くし、再現できる
-
インストールや環境によるチケットの低減
-
どのような環境でも移管して同じ動作環境を実現できる
-
BPCをより容易に提供できる
-
CPUやメモリの削減、物理ネットワークの複雑さ軽減
-
VMによる提供に比べてコストの削減
-
バグの再現が容易
-
動作の違いが無い
-
アジェイルな開発が可能
-
サードパーティー製品と分離して管理、必要なバージョンと組み合わせることができる
-
分離されているため、コンテナごとに異なるプログラミング開発
-
ベンダーがプッシュして迅速にアップデート
-
コンテナで提供できる次世代アーキテクチャのアピール
コンテナをどのように構成されているの?