少し前にWindowsのパソコンにLinux(Ubuntu)を入れることになり、その時に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を使う目的はWindowsにLinuxを入れるためなので、結果仮想環境のためにゲスト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
と書かれていました。
DockerはWSL2を使うのですね...
Hyper-Vも一緒に使うのですか...?
ここまで来たら何でもChatGPTに聞いてしまいます。
要約すると、
- Hyper-Vのみを使ってDockerを使用することができる
- Hyper-VやWSLはWindows機能の一部で、有効にすることで使える
- Hyper-VはホストOS上に仮想マシンを作成し、実行することができる
- WSL2(WSLの改良版)では Hyper-Vがバックエンドとして使われている
- WSL2を使うと、WSL2がLinuxのカーネルをWindowsのカーネルに統合して、処理が高速になる
- Windows上でDockerを使う(=WindowsのホストOS上でDockerコンテナを実行する)場合、Linuxカーネルが必要。
- Linuxカーネルは仮想化技術(Hyper-VやWSL 2)を使ってWindows上で実行される。直接実行はされない
という内容でした。
何となく飲み込めました。
これは図にすると間違っているところがいっぱい出てきそうです。
さいごに
技術のツール名がたくさん出てきて、できることが1つずつ異なっていて、中には技術を組み合わせて使われていたり、
常に進化している分野である印象を受けました。
どうしようもなく混乱することがあったら、おそるおそる図を作ろうかと思います。
...当初の疑問のWSLが入っているパソコンでDockerを使っても大丈夫なのか、は結果オーライですねきっと。
おしまい。