Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
10
Help us understand the problem. What is going on with this article?
@hiroki-it

各仮想化技術の違いをざっと理解するッ!!

補足

学んだ知識のほとんどは,Qiitaではなくこちらにバーッとまとめております.

仮想サーバ(仮想マシン)vs. コンテナ

自身の開発環境でWebサイトを動かしたい場合,まず,パソコン内にLinux環境のWebサーバ,APサーバ,DBサーバなどの物理サーバを仮想的に構築する.そして,自身のパソコンをクライアント,各仮想サーバをリクエスト先に見立てて,SSHプロトコルを用いてこれらのサーバにリモートログインする.仮想環境の構築方法にはいくつか種類がある.

ホスト型仮想化

ホストOS上で,各サーバを仮想的に構築する.

【Provider例】

VMware Workstation,Oracle VM VirtualBox

ホスト型仮想化

ハイパーバイザー型仮想化

BIOSから起動したハイパーバイザー上で,各サーバを仮想的に構築する(※ホストOSは用いない).

【Provider例】

VMware vSphere Hypervisor,Xen,KVM

ハイパーバイザー型仮想化

コンテナ型仮想化

ホストOS上で,サーバではなく,サーバとしての機能を持つコンテナを仮想的に構築する.カーネルのリソースを分割できるNamespace(PID namespace,Network namespace,UID namespace)とControl Groupsを用いて,単一のOS上に独立したコンテナを構築する.

【Provider例】

Docker,LXC,OpenVZ

コンテナ型仮想化

各仮想化のパフォーマンスの比較

起動速度の違い

ホスト型とハイパーバイザ型では,ハードウェア(CPU,メモリ,ハードディスク)とゲストOSを仮想化することが必要である.一方で,コンテナ型では,ハードウェアとゲストOSの仮想化は行わず,namespaceを用いてコンテナを構成するため,その分起動が速い.

サーバ仮想化

処理速度の違い

ゲストOS上のアプリを操作する場合,ホスト型とハイパーバイザ型では,ハードウェアやハイパーバイザーを経由する必要がある.この分だけ,時間(Overhead)を要する.一方で,コンテナ型では,各コンテナがホストOSとカーネルを共有するため,Overheadが小さい.

仮想化

  • Overheadの比較

sysbenchというベンチマークツールを用いて,CPU・メモリ・ファイルI/Oに着目し,物理マシン・コンテナ型仮想化(Docker)・ホスト型仮想化(VirtualBox)のパフォーマンスを比較.

各仮想化の比較

Providerによる仮想サーバ(仮想マシン)の構築

Vagrantの仕組み_オリジナル

Providerの操作

基本ソフトウェアにおける制御プログラムや一連のハードウェアを仮想的に構築できる.これを,仮想サーバ(仮想マシンとも)という.構築方法の違いによって,『ホスト型』,『ハイパーバイザ型』に分類できる.

Provisionerの操作

Providerによって構築された仮想サーバに,Web開発のためのソフトウェアをインストールすることができる.具体的には,プログラミング言語やファイアウォールをインストールする.

  • Ansible

Ansibleでは,ymlの文法を用いて関数処理を実行できる.

ファイル名 役割
playbook.yml ソフトウェアのインストールタスクの手順
inventory/* 反映先のサーバの情報
group_vars/* 複数のサーバへの設定
host_vars/* 単一のサーバへの設定

VagrantによるProviderとProvisionerの操作

ProviderとProvisionerの操作を自動化できる.チームメンバーが別々に仮想サーバを構築する場合,ProviderとProvisionerの処理によって作られる仮想サーバの環境に,違いが生じてしまう.Vagrantを使う場合,ProviderとProvisionerによる処理方法は,Vagrantfileに記述されている.このために,Vagrantを用いれば,チームメンバーが同じソフトウェアの下で,仮想サーバを構築し,ソフトウェアをインストールすることができる.

Dockerによるコンテナの構築

Dockerの操作

  • Dockerクライアント

Dockerクライアントは,ssh接続によって,Dockerデーモンを操作できる.

  • Dockerデーモン

ホストOS上で稼働し,Dockerの操作を担う.Dockerクライアントは,Dockerデーモンを通して,Docker全体を操作できる.

Dockerの仕組み

10
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
hiroki-it
近畿大・農 ▶︎ 信州大・理編入 ▶︎ 京都大・院理生物(2019卒) ▶︎ エンジニア転向 ▶︎ App developer(Silex×DDDxCQRS|Vuejs) ▶︎ SRE(クラウドインフラ|IaC|CI/CD|コンテナ|サーバ|監視|DDDバックエンド)

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
10
Help us understand the problem. What is going on with this article?