LinuC-1 - 101試験 - 1.01:Linuxのインストールと仮想マシン・コンテナの利用 - 1.01.2 仮想マシン・コンテナの概念と利用

Last Update : August 21 2022 17:47:19

     

a. 仮想マシンとコンテナ

1. ハイパーバイザー型

仮想マシンはハイパーバイザによって作成された仮想的なハードウェア環境です。仮想マシンにOS、さらに実行するアプリケーションやライブラリをインストールし、独立した実行環境を構築します。
ホストOSの処理を必要とせずハードウェアを直接制御できるため処理速度が向上します。なおハイパーバイザー型は、直接ハードウェア上で動作することから「ベアメタル(bare metal)型」と呼ばれることがあります。 ハードウェア上にハイパーバイザーと呼ばれる仮想マシン管理ソフトウェアを用意し、その上でゲストOSを動かす方式。 ハイパーバイザーにどこまで機能をもたせるかによって、モノリシックカーネル型と、マイクロカーネル型に分けることができる。

  • モノリシックカーネル型
    仮想マシンを実行するためのすべての機能をハイパーバイザーが担う方式。
  • マイクロカーネル型
    仮想マシンの管理やデバイスドライバを、特別な権限をもった仮想マシン(親パーテーション)に任せ、ハイパーバイザーの機能を最小限にする方式である。

例 VMware vSphereやXen、KVM、Hyper-V


2. コンテナ型

コンテナはホストOS上の独立したアプリケーション実行環境です。独自のプロセステーブル、ユーザ、ファイルシステム、およびネットワークスタックを備えたフル機能のOS環境のように動作します。
コンテナはコンテナランタイムによって作成された、ホストOSのリソースを隔離・制限したプロセスです。実行するアプリケーションやライブラリを個別に用意し、アプリケーション実行時にプロセスの属性を変更してホストOSのリソースを隔離・制限することで、独立した実行環境を構築します。

仮想マシンではアプリケーションやライブラリの他にOS実行のためのリソースが必要です。起動時間も数分かかる場合があります。 しかし、コンテナの場合はアプリケーションやライブラリの実行に必要なリソースだけを準備すればよく、起動時間は通常のアプリケーション実行と遜色ないレベルです。単純なアプリケーションであれば1秒もかからず起動します。つまり、コンテナは仮想マシンに比べてオーバーヘッドが小さく、ひとつのホストで多くのコンテナを実行することが可能なのです。

続いて、隔離レベルの違いについてです。 仮想マシンは仮想的なハードウェアレベルで隔離され、仮想マシンで実行されるアプリケーションはホストOSや他の仮想マシンから確認できません。また仮想マシンからホストOSや他の仮想マシンへのアクセス方法も限定的なため、セキュリティ面で問題があっても他の仮想マシンが受ける影響を最小限に留めることができます。

コンテナはホストOSのプロセスのひとつとして動作するので、ホストOSのプロセスリストからコンテナプロセスを確認可能です。また、ホストOSのリソースを共有することから、リソースの隔離・制限が不十分なコンテナがデプロイされた場合、ホストOSや他のコンテナに影響を与える可能性があります。コンテナは仮想マシンに比べて隔離レベルは低いので、運用には注意が必要となります。


3. ホスト型

ホストとなるOS上で仮想化ソフトウェアを使い、別のゲストOSを運用する方法です。
アプリケーションを採用するような手軽さでサーバー仮想化を実現できるメリットがある一方で、ゲストOSを動かすためにはホストOS自体の処理も必要なるため、ハイパーバイザー型と比べて処理速度が出にくいのがデメリットです。
例 VMware Player・VMware Workstation・Oracle VirtualBox


b. VirshコマンドによるKVMゲストOSの管理

KVM(Kernel-based Virtual Machine)は、Linuxのカーネルに標準で組み込まれている仮想化の仕組みです。
KVMを使用するには、CPUが仮想化支援機構に対応している必要があります。AMDだとAMD-V、IntelだとVT-xのCPU。
CPUが対応しているかは、下のコマンドで確認できます。

# lscpu | grep Virtualization
Virtualization: VT-x
または、
# grep -E 'vmx|svm' /proc/cpuinfo
VT-xまたはsvmと表示されれば仮想化に対応しています。

● ゲストOSの登録

もし他のホストマシンなどからイメージと定義ファイルをコピーしてきた場合、virsh コマンドでそのイメージを管理するにはvirsh define コマンドを使用してlibvirt 管理下に登録することができます。 例えば/etc/libvirt/qemu ディレクトリ配下に定義ファイルがある場合、その定義ファイルを指定してvirsh define コマンドを実行することで、ゲストOS をvirsh コマンドで管理できるようになります。
※ package 'libvirt-clientが必要です。

# virsh define /etc/libvirt/qemu/kvm_centos7.xml

● ゲストOSの確認

# virsh list --all
 Id    Name                           State
----------------------------------------------------
 -     kvm_centos7                    shut off
起動中であれば、Stateがrunningになる。
● ゲストOSの起動

 virsh start DOMAIN_NAME_OR_UUID [--console]

# virsh start kvm_centos7

● ゲストOSの停止

 virsh shutdown DOMAIN_NAME

# virsh shutdown kvm_centos7

上記コマンドで停止しない場合は、destroy オプションで強制終了します。

# virsh destroy kvm_centos7

ホストOSからゲストOSのコンソールに接続するには、

# virsh console kvm_centos7
Connected to domain kvm_centos7
Escape charactor is ^]

CentOS login::

ゲストOS から抜けるには、Ctrl + ] キーを押す。


b. dockerコマンド

dockerとは、他のシステムとは独立した環境で、コンテナ化したアプリケーションを構築・実行・共有するための、全てが揃った開発プラットフォームです。
dockerを操作するには、dockerコマンドを使用します。

● コンテナを取得する

dockerイメージを取得するためには下のコマンドで取得します。

 docker pull image名[:タグ名]

# docker pull centos:7

● コンテナを起動する

docker runは指定したイメージを起動するためのコマンドである。実際にはイメージを取得するための「docker pull」や、イメージから新しいコンテナを作成する「docker create」、コンテナ中でプログラムを起動する「docker start」などのコマンドを合成したものである。起動時にCPUの使用率や使用メモリ量などを制限したり、バックグラウンド実行させたりなど、さまざまなオプションを指定できる。
 なおデフォルトでは、コンテナは実行が終了しても残っているので(実行結果などを確認できるようにするため、すぐには削除されない)、不要ならdocker rmでクリーンアップする。

 docker run --name [コンテナ名] -it [image名] /bin/bash

# docker run --name python-sample -it sample-project/python:1.0 /bin/bash

● バックグラウンドでコンテナを起動する

# docker run --name python-sample -it -d sample-project/python:1.0 /bin/bash

動作中のdockerの確認は、docker ps で確認します。


# docker ps

バックグラウンドのdockerに接続するには、docker attach で接続します。


# docker attach python-sample

● コンテナにログインする

 docker exec -it [コンテナ名] bash

# docker exec -it centos8_check /bin/bash

● コンテナを停止する

コンテナに SIGTERM を送信し、一定期間後に SIGKILL を送信

 docker stop [オプション] コンテナ [コンテナ...]

● docker stop コマンドオプション
  -t, --time=10 kill で停止する前に待機する秒数
  --help 使い方の表示

# docker stop centos8_check

コンテナを削除するには、docker rm を使います。

 docker rm コンテナID

# docker rm 08gr76hd51k3


z. 出題範囲概要

概要 :
  • 仮想マシンとコンテナを実現する基本技術を理解している。
  • ハイパーバイザー、コンテナのそれぞれの特徴と違いを理解する。
  • 仮想マシン、コンテナの起動、停止ができる。

詳細 :
  • カーネルとハイパーバイザーと仮想マシンの関係を理解している。
    ハイパーバイザー、仮想化支援機能
    仮想マシンとコンテナの特徴を理解している。
  • ホストOSとコンテナの関係を理解している。
  • 仮想マシンの起動と停止ができる。
    virsh
  • 仮想マシンにログインできる。
  • コンテナの起動と停止ができる。
    docker

  [ 例題 ] 


         

    www.it-shikaku.jp