仮想マシンとは?
- 実際のコンピューター上に構築された仮想的なコンピューター
※ Windowsの入ったコンピュータにLinuxが入ったコンピュータが作れる
メリット
- 何台もサーバを用意する必要がない
- 複数のサーバを一台で操作できる
- 様々な環境を手軽に導入できる
デメリット
- 本来の性能が活かせない
- 物理環境の不具合の影響が大きくなる
仮想化
ホストOS型
- 物理OSがある
- 仮想化ソフトをインストールすることで構築できる
- WindowsやMac機に手軽に仮想環境を導入できる
- PCの性能を活かしきれない(物理マシンへの負荷がかかりやすい)
ハイパーバイザ型
- 物理OSがない
- Linuxで用いられる仮想化の手段
- CPUに仮想化支援機能が搭載されている必要がある
- 効率的に仮想マシンを稼働させることができる
- 専門的な知識が必要なので導入ハードルが高い
仮想マシンとコンテナの違い
仮想マシン
- マシンの中にマシンを作る技術
コンテナ
- マシンの中に隔離されたサーバを作る技術
KVM (Kernel-based Virtual Machine)
- Linuxカーネルに標準で組み込まれている仮想化システム
- ハイパーバイザ型に分類される
- 利用するためにはCPUが対応している必要がある
(例)$ |scpu |grep Virtualization
Virtualization: VT-x ※← このように表示されていればOK
(例)$ grep -E 'vmx | svm' /proc/cpuinfo
flags :(大量の文字列が出てくる)
※この中に『vmx』か『svm』があればOK
KVM仮想マシンの基本操作
- 導入している仮想マシンの一覧を表示する
(例)# virsh list --all
Id Name State
- centos-vm shut off
- ubuntu-vm shut off
- 仮想マシンを実行する
(例)# virsh start centos-vm
- 仮想マシンを停止する
(例)# virsh shutdown centos-vm
virshコマンドについて
| コマンド | サブコマンド | 引数 |
|---|---|---|
| virsh create | xmlファイルから仮想マシンを作成 | xmlファイル |
| virsh start | 仮想マシンを起動 | 仮想マシン名 |
| virsh resume | 仮想マシンを再開 | 仮想マシン名 |
| virsh shutdown | 仮想マシンを正常に終了 | 仮想マシン名 |
| virsh destroy | 仮想マシンを強制終了 | 仮想マシン名 |
| virsh suspend | 仮想マシンを一時停止 | 仮想マシン名 |
| virsh reboot | 仮想マシンを再起動 | 仮想マシン名 |
| virsh console | 仮想マシンのコンソールに接続 | 仮想マシン名 |
| virsh dumpxml | 仮想マシンの 設定をxmlファイルで出力 |
仮想マシン名 |
| virsh list | 稼働中の仮想マシンの一覧を表示 |
- 『virsh list --all』で停止中のものも含めて、導入中のすべての仮想マシン一覧を表示する
libvirtとは?
- 仮想マシンの管理を便利にするためのソフトウェアの集まり
- 『library + virtualization』を組み合わせて『libvirt』
- 様々な仮想化に対応している
- Cライブラリを中心に構成されている
コンテナとは?
- アプリケーションを仮想的に環境ごとに独立させて管理する
- コンテナエンジンというソフトウェアを用いてコンテナを作成・管理する
- 仮想マシンとは違い、OS(カーネル)やハードウェアの基本設定は共有する
- 『cgroups』というシステムがコンテナごとのリソースを管理する
- 『namespace』というシステムがコンテナごとのユーザー権限などを管理する
※ cgroups:リソース管理
※ namespace:ユーザー権限などを管理
コンテナのメリット
- それぞれのコンテナはお互いに独立して干渉しない
- コンテナの複製が簡単に行える
- アプリケーションに必要な環境ごとコンテナを複製できる
- 別のPCにコンテナを移しても安定して稼働する
Dockerとは?
- 代表的なコンテナ管理のソフトウェア
Dockerイメージを取得し、起動する
①Dockerイメージを取得(ダウンロード)する
(例)# docker pull centos:8
Dockerについて Dockerイメージを取得しろ CentOS 8のイメージを
②Dockerイメージからコンテナを作成し、起動する
(例)# docker run centos:8
Dockerについて Dockerイメージを作成し起動しろ CentOS 8のイメージを元にして
※ Dockerイメージからコンテナを名前をつけて起動し、操作する
(例)# docker run -it --name centOStest centos:8 /bin/bash
Dockerについて 作成し起動しろ (擬似)端末を開いて入力させろ
『centOStest』と名前を付けろ CentOS 8のイメージを元にして
bash(シェルの一種)を使わせろ
イメージやコンテナを確認する
- コンテナを表示する
(例)# docker ps -a
Dockerについて コンテナの一覧を表示しろ 終了したものも含めて全て
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
- イメージを表示する
(例)# docker images
Dockerについて イメージの一覧を表示しろ
REPOSITORY TAG IMAGE ID CREATED SIZE
Dockerコマンドについて
| コマンド | サブコマンド | 引数 |
|---|---|---|
| docker pull | Dockerハブからイメージを ダウンロード |
イメージ名[:タグ] |
| docker push | Dockerハブにイメージを アップロード |
イメージ名[:タグ] |
| docker run | 新しいコンテナを作成して実行 | イメージ名[:タグ] |
| docker ps | (稼働中の) コンテナの一覧を表示 |
|
| docker images | Dockerイメージの一覧を表示 | |
| docker rm | コンテナを削除 | コンテナ名 コンテナID |
| docker start | 作成済みのコンテナを起動 | コンテナ名 コンテナID |
| docker stop | コンテナを停止 | コンテナ名 コンテナID |
| docker kill | コンテナを強制停止 | コンテナ名 コンテナID |
| docker attach | コンテナ(の標準入出力)に 接続して操作 |
コンテナ名 コンテナID |
| docker exec | コンテナでコマンドを実行 | コンテナ名(ID) コマンド |
※ コンテナに接続している状態から一時的に抜けるには『Ctrl』+『P』から『Q』
参考サイト
【LinuC/LPIC合格講座】「仮想マシン」とは何かをやさしく解説!クーポンはこちら【ITエンジニア基礎入門】#7
【Linux初学者#6】仮想マシンとコンテナの違い
【LinuC/LPIC合格講座】「仮想マシン」の使い方を簡単理解!クーポンは概要欄から【ITエンジニア基礎入門】#8
【LinuC/LPIC合格講座】「コンテナ」について徹底解説!クーポンは概要欄から【ITエンジニア基礎入門】#9
【LinuC/LPIC合格講座】「コンテナ」の使い方を簡単理解!クーポンは概要欄から【ITエンジニア基礎入門】#10