実行環境と仮想化技術について - DockerとWSL

少し前にWindowsのパソコンにLinuxUbuntu)を入れることになり、その時にWSLという存在を知りました。

そして今はそのパソコンにDockerを入れようとしています。

パソコンにどういう感じで収まっているのか、(多分問題はないのでしょうが)両方入っていて負荷とか大丈夫なのか気になって、それぞれがどういうものなのか調べました。

DockerとWSLの関係

この2つで調べてもどちらかの情報しか出てきませんでした。

なので頼みの綱、ChatGPTに聞いてみました。

【ChatGPTより 】

実行環境の構築に使われる技術
│
├─ インフラストラクチャ仮想化技術
│    ├─ ハイパーバイザ型仮想化 (Type 1)
│    │      ├─ VMware ESXi
│    │      ├─ Microsoft Hyper-V
│    │      ├─ Xen
│    │      └─ KVM (Kernel-based Virtual Machine)
│    │
│    └─ ホスト型仮想化 (Type 2)
│           ├─ Oracle VirtualBox
│           ├─ VMware Workstation
│           └─ Parallels Desktop
│
├─ コンテナ化技術
│    ├─ イメージベースのコンテナ
│    │      ├─ Docker
│    │      └─ Podman
│    │
│    └─ システムコールレベルのコンテナ
│           ├─ LXC (Linux Containers)
│           └─ rkt (pronounced "rocket")
│
├─ ユーザーランド仮想化技術
│    ├─ WSL (Windows Subsystem for Linux)
│    ├─ Cygwin
│    ├─ MinGW/MSYS
│    └─ CoLinux (Cooperative Linux)
│
└─ クラウドベースの実行環境
       ├─ AWS EC2 (Amazon Elastic Compute Cloud)
       ├─ Azure Virtual Machines
       ├─ Google Compute Engine
       └─ IBM Cloud Virtual Servers

この系統図では、以下のようなポイントが示されています。

インフラストラクチャ仮想化技術: 物理ハードウェアの上に仮想化環境を構築する技術で、ハイパーバイザ型とホスト型の2つに分かれます。

コンテナ化技術: アプリケーションやその実行環境をコンテナとしてパッケージ化する技術で、イメージベースのコンテナとシステムコールレベルのコンテナに分かれます。DockerやPodmanが代表的なイメージベースのコンテナ技術です。

ユーザーランド仮想化技術: ホストOSのユーザーランドで動作する仮想化技術で、Windows上でLinux環境を提供するWSLや、Cygwin、MinGW/MSYS、CoLinuxなどがあります。

クラウドベースの実行環境: パブリッククラウドプロバイダーが提供する仮想マシン環境で、AWS EC2、Azure Virtual Machines、Google Compute Engine、IBM Cloud Virtual Serversなどがあります。

Dockerはコンテナ化技術の中で、アプリケーションの実行環境を管理するために使用されます。一方、WSLはユーザーランド仮想化技術の一部であり、Windows上でLinux環境を提供します。

だそうです。

この情報を鵜呑みにはできませんが(よく質問すると「すみません誤りがありました」と言われるので...)、 遠い親戚ぐらい(?)な関係であることは分かりました。

分類の仕方もおそらくいろいろなのだと思います。

Docker

Dockerを調べると、仮想化技術は大きく3つあり、

  • ホスト型
  • ハイパーバイザー型
  • コンテナ型

Dockerはそのうちのコンテナ型だとありました。

参考
Docker入門(第1回)|初心者向けに概要や基本コマンドを解説

コンテナ型は、ゲストOS...仮想化マシンを使った仮想化環境を使わずにホストOSのカーネルを利用する、ということがホスト型・ハイパーバイザー型と分ける大きな違いのようです。

ゲストOSが必要(?)は仮想化技術とコンテナ化技術は異なるもの、と覚えておこうと思います。

カーネル(kernel):OSの核の部分。Linuxの場合は、カーネルとソフトウェアを合わせて「Linux」(広義/他のOSと一緒)と言ったり、カーネル部分のみを指して「Linux」(狭義)と言う場合がある。

ちなみにあのカーネルおじさんはスペルが違います(colonel=大佐)。詳しくはWikipediaをご覧ください。

WSL( Windows Subsystem for Linux

「ホストOSのユーザーランドで動作する仮想化技術」とありますが、意外とDockerと近い技術なのでは?

ユーザランド(userland):ホストOSのカーネル以外の部分。コマンド、シェルなどのソフトウェア群。一般ユーザ権限で操作できる領域。

WSL自体はホストOSを利用したものなのでDockerと似ていると思ったのですが、
WSLを使う目的はWindowsLinuxを入れるためなので、結果仮想環境のためにゲストOSが入っているのでは...?と思いました。

MAMPとかXAMPP

これまで慣れ親しんできたMAMPやXAMPPは果たしてこの体系図のどこに位置するのでしょうか?
またChatGPTに聞いてみました。

MAMPやXAMPPは、開発者がローカル環境でウェブアプリケーションを開発・テストするためのパッケージです。これらのパッケージは、特定のアプリケーションスタック(Apache、MySQL、PHPなど)を一度にインストールし、構成することで、ローカル環境でウェブサーバーを構築するのに役立ちます。

これらのパッケージは、主に開発環境の構築を容易にすることを目的としています。そのため、上記の体系図では「コンテナ化技術」や「仮想化技術」のカテゴリには当てはまりません。代わりに、ローカル環境のウェブ開発やテストに焦点を当てたツールとして位置付けられます。

具体的には、「ホストOS」の下に配置され、ユーザーが直接インストールして使用するソフトウェアとして表現できます。これらのパッケージは、ローカル環境でのウェブ開発に便利な機能を提供しますが、本番環境での利用には向いていません。

だそうです。

仮想化と呼ぶまでもなく、簡易的だとは何となく感じていました。

MAMPやXAMPPはホストOSの上にインストールされ、そのOSのリソース(CPU、メモリ、ディスクスペースなど)を利用する、とのことです。

OSのカーネルを利用するわけではないですが、これもDockerと似ている...?
と思ったのでさらにChatGPTに聞いてみました。

MAMPやXAMPPは、あなたのコンピューター上で直接動作するソフトウェアであり、特定のウェブ開発環境を提供するのに対し、コンテナ化技術はアプリケーションやその実行環境をコンテナとしてパッケージ化し、環境を簡単に移動させることができる技術です。

MAMP、XAMPP:ローカル、個人の利用、テスト用
Docker:軽量、再現性が高い、本番環境にも使える

といった感じです。

おそらくできる内容は全然違うとは思いますが、それは今まで使ってこなかったDockerを始めることで分かってくると思います。

Vagrant

仮想化技術っぽいものでVagrantを少し触ったことがあったので調べました。

Vagrant自体は、ホスト型仮想化ソフトウェアではありません。Vagrantは、仮想化プロバイダー(通常はVirtualBox、VMware、またはDockerなど)を使用して仮想マシンを管理するためのツールです。

Vagrantfileという単一の設定ファイルを使用することで、チーム全体で同じ環境を共有し、開発プロジェクトの一貫性を確保することができます。

そういえば最初にVirtualBoxを入れた気がします...。

Dockerを入れてみたらWSLと関係がある事がわかった

ひとまず気にせずDockerをインストールしたときのことです。

インストーラーに

Configuration
☑Use WSL 2 instead of Hyper-V (recommended)

Hyper-Vの代わりにWSL 2を使用する(推奨))

と表示されました。

ちなみにUdemyの資料には

☑Enable Hyper-V Windows Features
☑Install required Windows components for WSL2

Hyper-VWindows機能を有効にする
WSL2に必要なWindowsコンポーネントのインストール)

と書かれていました。

DockerはWSL2を使うのですね...
Hyper-Vも一緒に使うのですか...?

ここまで来たら何でもChatGPTに聞いてしまいます。

要約すると、

という内容でした。
何となく飲み込めました。

これは図にすると間違っているところがいっぱい出てきそうです。

さいごに

技術のツール名がたくさん出てきて、できることが1つずつ異なっていて、中には技術を組み合わせて使われていたり、
常に進化している分野である印象を受けました。

どうしようもなく混乱することがあったら、おそるおそる図を作ろうかと思います。

...当初の疑問のWSLが入っているパソコンでDockerを使っても大丈夫なのか、は結果オーライですねきっと。

おしまい。