業務でEC2やDockerを使用している際に「なんか似てるな...?」と感じたので、
両者の違いを調べてざっくりまとめました。
仮想サーバー(EC2)
EC2は サーバー仮想化 技術です。
ハイパーバイザーによって立ち上げられるハードウェア環境で
仮想環境にゲストOSやアプリケーションのインストールを行い、
ホストOSとは独立した実行環境を構築します。
ハイパーバイザーとは
ホストOSが不要なタイプの、仮想マシンを作って動かすためのソフトのことです。
コンテナ(Docker)
Dockerとは、コンテナ型仮想化 技術です。
ホストOSのマシンリソースをコンテナ専用に隔離・制限したプロセスであり、
コンテナ上でアプリケーションを実行する際に、物理マシンから確保したリソースのプロセスの属性を変更させることで
独立した実行環境を構築します。
どちらも共通点としてハードウェアからリソースを確保するということがありますが、
プロセスの共有と管理 の面で仮想化とコンテナには違いがあります。
プロセス管理の違い
仮想サーバー(EC2)
仮想サーバーの場合は、仮想化されたハードウェアごとにリソースの隔離が行われています。
仮想環境上で起動されたアプリケーションは、
ホストOSや他の仮想マシンのプロセスとは独立しているということになり、
プロセス管理は仮想環境上のゲストOSによって行われます。
コンテナ(Docker)
コンテナの場合、ホストOSのプロセスの一部として管理されるため
ホストOSとプロセスが共有されています。
そのためホストOSにてローカル環境のポートを割り当てることで
別プロセスからアクセスすることが可能になってます。
それぞれの利用が推奨されるケース
仮想サーバー(EC2)
-
独立したシステム運用
-
ホストOSと強い依存関係を持つコンテナと違い、セキュリティ面などでホストOSとは完全に切り離して運用したい場合
-
GUIアプリケーションの実行
-
GUI操作が伴うアプリケーションを長時間稼働させる際、デスクトップ画面を仮想環境で準備することはコンテナでは難しいため仮想化で立ち上げたゲストOS内でデスクトップ環境を構築
コンテナ(Docker)
-
チーム共通の開発環境の整備
-
仮想化での数GBに及ぶイメージサイズに比べコンテナのyaml形式のファイルが小さく、再配布が容易
-
アプリケーションの継続的デプロイ
-
イメージファイルの容量が小さいことで再配布や起動が容易になり、デプロイ回数が増えても対応が可能
-
単一から複数個に限られたアプリケーションの利用
-
イメージの最小単位がOSである仮想化と比べ、コンテナではOSから単一のソフトウェアまで様々である中
スピード重視で開発する際にスムーズに進めることが可能
仮想化が抱えていたデプロイの効率化という問題をコンテナが解決する形になっています。
引用元→コンテナと仮想化の違いとは?
補足
コンテナは ホストOSのカーネル(Linuxカーネル)を利用して動作している らしいです。
ホストOSのカーネルを各コンテナが共有することで
ホストマシンのリソースを節約しながら動作しているようです。
この軽量化によってDockerコンテナの起動の速さにつながっているということですね。
また、Linuxカーネルを持たないWindowsやMac上でもコンテナの起動ができるのは
Dockerを利用する際に裏でLinux仮想マシンが起動する仕組みになっているためで、
各コンテナもこの仮想マシン上で起動するようになっているということです。
引用元→https://kitsune.blog/docker-summary
終わりに
ここら辺の知識がぼんやりとしていたので
備忘録としてまとめられてよかったです。
間違ったことやおかしな部分がありましたら教えていただけると幸いです。m(__)m
最後まで読んでいただきありがとうございました。