Linuc101の学習①

このブログのマスコット的な存在 Linux

OSについて

OSとは

OSはオペレーティングシステムの略でコンピューターを動作させるためのソフトウェアのことです。 ハードウェア・ソフトウェア・ファイルの管理とそのGUIを提供しユーザーが操作できる環境を提供します。 windowsやmac、andoroid、ios、Linuxなどがあります。

OSが起動するまで

OSやその上で動作するソフトウェアの情報は、HDDやSSDなどの補助記憶装置に保管されています。 コンピューターの電源を入れると、まずUEFI(古い機器だとBIOS)と呼ばれるシステムが起動し、ハードウェア情報を読み込みます。 その後UEFIが認識しているOSを読み込み、OSの起動が開始されます。(その後の詳細な流れは今回は割愛します)

BIOSについて

UEFI(BIOS)はマザーボードに搭載されています。 マザーボードに接続されているその他のパーツを読み込む機能や、機器の簡単な設定が行えるほか、ストレージ(HDDやSSD)内のOS(ブートローダー)を読み込む機能を持っています。

コンピューターの仮想化と仮想マシン・コンテナ

コンピューターの仮想化

LinuC101では仮想マシンとコンテナという2つの仮想化方式を学びます。

仮想マシンはその名の通りソフトウェアによって作られた、仮想的なコンピューターのことです。仮想マシンを用意する方法には、ホスト、ハイパーバイザーの2種類があります。

その他の仮想化技術としてコンテナがあります。

ホスト型

OS上に仮想マシン用のソフトウェアを稼働させ、その上で仮想マシンを作る仕組みです。

  • パソコンの上にもう一台パソコンを作るイメージ
  • その他の手法と比較して効率的ではない
  • 自由度が高く、様々な種類のOSに対応している
  • 実務的な導入は見たことがない。学習のために利用する分には手軽でよいと思う

代表的なソフトウェアとしてvirtualBOX, VMware Workstationなどがあります。

ハイパーバイザー型

OS自身が仮想マシン用のソフトウェアとして働き、その上で仮想マシンを作る仕組みです。

  • 仮想マシン用のソフトウェアがそのままOSになったイメージ
  • ホスト型に比べ効率的に仮想マシンを作ることができる
  • 自由度が高く、様々な種類のOSに対応している
  • 私は世の中のほとんどのサーバは大体この形式で作られていると思ってます

代表的なソフトウェアとしてESXi,hyper-V,KVMなどがあります。

コンテナ

OS上にコンテナ用のソフトウェアを稼働させ、その上でコンテナを作る仕組みです。

例えば、今見ていただいているこのブログは、私の管理するコンピューターの中で、「apache」や「Nginx」といったアプリケーションが動くことで、webサーバとしての機能を提供しています。

これらのアプリケーションを「コンテナ」という単位で管理する方法です。 ちょっとややこしいですね…

コンテナの特徴は以下の通りです。

  • コンテナはカーネル(OSの核みたいなもの)を共有している。
  • 一つのホスト上で、異なるカーネルを持つコンテナは作成できない
  • 一台のサーバにいろいろな機能を持たせ、それぞれの機能を別々のサーバのように稼働させるイメージ
  • 本質的には一台のサーバのため、リソースの無駄が少なく効率的
  • セキュリティ、データ管理、監視などの面で仮想マシンに劣る場合が多い
  • 実務では数回見たことがある程度

代表的なソフトウェアとしてdocker,podman,Kubernetesなどがあります。

出題されるコマンド

KVM

KVMはハイパーバイザー型の一つです。 実務ではESXiやHyper-Vを利用する機会が多かったです。 ここではLinuCで出題される、KVMのコマンドを確認していきます。

コンピューターにハイパーバイザーをインストールして動作させるためには、コンピューターに搭載されているCPUがハイパーバイザーに対応している必要があります。

この機能はCPUメーカーによって異なりますが、intel社のCPUではVT-x、AMD社のCPUではAMD-Vと呼ばれます。 この機能を確認するためには下記のコマンドを入力します。

 lscpu | grep Virtualization 

このコマンド結果の中にVT-xもしくはAMD-Vの記載があれば対応しています。

また、/proc/cpuinfo内を確認することでも確認できます。

この場合intel製なら「vmx」AMD製なら「svm」の記載があれば対応しています。 ※コマンドについては別途記事を作成した際リンクします

virshコマンドについて

KVMにおいて、ハイパーバイザーとその仮想マシンをコントロールするためには「virsh」コマンドを利用します。

コマンドの書式は以下の通りです。

 virsh [オプション] <サブコマンド> [引数] 

主な使い方を見ていきましょう。

仮想マシンの一覧表示

仮想マシンの一覧を表示するには、listサブコマンドを利用します。

virsh list [オプション] 

主なオプションは以下の通りです。

  • –all:すべての仮想マシン(起動中・停止中)を表示
  • –name:仮想マシン名のみを表示
  • –uuid:UUID のみを表示
仮想マシンの起動・停止

仮想マシンを起動するにはstartサブコマンドを利用します。

virsh start <仮想マシン名>

仮想マシンを停止するにはstartサブコマンドを利用します。

virsh shutdown <仮想マシン名>

仮想マシンを強制的に停止するにはdestroyサブコマンドを利用します。※パソコンのコンセントを強制的に引き抜くようなイメージです。仮想マシンに良い影響はありません。

virsh destroy <仮想マシン名>
仮想マシンに接続

起動した仮想マシンに接続するにはconsoleサブコマンドを利用します。

virsh console <仮想マシン名>

その他のサブコマンドやオプションもありますが、Linuc101試験には出てこないものだと思うので割愛します。

docker

仮想マシンはOSのイメージファイルから、OSインストールの手順を経て作成されますが、コンテナは少し異なります。 ※仮想マシンの作成方法はLinuC101では問われないので割愛します。

Dockerレジストリと呼ばれる場所から、Dockerイメージを取得し、このDockerイメージから、コンテナを作成します。

Dockerコマンドについて

dockerにおいてコンテナを取り扱う際には、「docker」コマンドを利用します。

コンテナレジストリからコンテナイメージの取得
 docker pull <イメージ名>:<タグ> 
取得したコンテナイメージの一覧確認
docker images 
取得したコンテナイメージの削除
docker rmi <イメージIDまたは名前>
コンテナの作成 & 実行
docker run [オプション] <イメージ名>

オプションは以下の通りです。

  • -d バックグラウンドで実行(デタッチモード)
  • -it 対話モード(ターミナルを開く)
  • –name <名前> コンテナに名前を付ける
  • -p <ホストポート>:<コンテナポート> ポートをマッピング
  • -v <ホストディレクトリ>:<コンテナディレクトリ> ボリュームマウント

    多くの場合、そのまま起動したコンテナを操作するので-itが使われることが多いイメージです。
コンテナ一覧の確認
docker ps 

上記は実行中のコンテナのみ表示されます。 停止されているコンテナも表示させるには-aオプションを利用します。

docker ps -a
コンテナの停止
docker stop <コンテナIDまたは名前> 
コンテナの再起動
docker restart <コンテナIDまたは名前>
コンテナの削除
docker rm <コンテナIDまたは名前>

その他のサブコマンドやオプションもありますが、Linuc101試験には出てこないものだと思うので割愛します。

まとめ

コンピューターの仮想化や、その技術についてまとめてみました。
①としましたが、PCまったく触れたことのない方だと、チンプンカンプンな内容も多いですね…
これからこの記事は画像の追加も行いますし、別途今回の記事を補完できそうな内容のページを作成した際は、随時リンク貼っていきますので、しばらく経ったらまた見てもらえると改善しているかもしれないです!

最後まで閲覧いただきありがとうございます!
皆様のお役に立てれば幸いです。

コメント

タイトルとURLをコピーしました