前回の記事で、Docker(コンテナ)の動作原理について説明しました。

DockerはLinuxの機能を利用して、コンテナを作成します。
それが何を意味するかというと、DockerはLinux上でしか動作しない、ということです。
え、じゃあWindowsやMacでDockerを利用できるのはなぜ??
この疑問を解消すべく、調査していきたいと思います!
※Windows OSの機能を使ってコンテナを作成する、「Windowsコンテナ」なるものもありますが、あまりメジャーではないようです。本記事では一般的に使用されている、Linux機能を利用したDockerについて扱います。
Docker 仕組みで検索すると、、
普通に「Docker 仕組み」で検索すると、よく出てくるのは以下のような図。
でも、この場合のホストOS = Linuxなので、WindowsやMacでどう動作するの?という疑問は解消できません。

次の手がかりとして、WindowsでDockerをインストールする際のシステム要件を見てみます。
公式サイトには以下のように書かれています。

WSL2 (Windows Subsystem for Linux)が必要ということは、
どうやらLinux VM上でDockerを動かしているのか、、、という想像が膨らみます。
やはりLinux VMが裏で稼働していた
色々調べていると、Dockerの公式ブログでこの辺りの詳細を解説されているのを見つけました。
Docker Desktop の中心には、Docker が管理する軽量の LinuxKit VM があります。
〜中略〜
この VM は、含まれているすべての Linux ツールが実行される場所であり、Docker エンジンを使用しているときにすべての Linux コンテナーが実行される場所です。Windows では、この VM を WSL2 で実行し、UI でオンに切り替えるだけで、WSL2 ディストリビューションのすべての Docker へのアクセス権を付与できます。 WSL 2 バックエンドの詳細については、「 Docker デスクトップ WSL 2 バックエンドの紹介 」を参照してください。 Mac (Intel および M1 マシン上) では、現在、以前の HyperKit 実装から移行して、Apple の新しい仮想化フレームワークを使用してこの VM を実行しています。
やはり、Docker DesktopがLinux VMを管理し、その上でコンテナを動かしていたようです!
また、公式ドキュメントを見るとMacで仮想マシンを管理する手法について明記されていました。
現在は以下3つの手法があるようで、Docker Desktopの設定でも確認することができました。
- Docker VMM (β版)
- Apple Virtualization Framework(標準)
- QEMU (Legacy) for Apple Silicon(過去の手法)

正しい概念図を書いてみる
WSL2, Apple Virtualization frameworkの仮想化方式はそれぞれ以下になります。
- WSL2: ハイパーバイザー ベアメタル型
- Apple Virtualization framework: ハイパーバイザー ホスト型(参照)
これらを踏まえると、Windows/MacでDockerを使用する際の、正しい概念図は以下のようなものになると考えられます。

多少方式は異なるものの、要はDocker DesktopがLinux仮想マシンを起動し、その上でDockerが動いているということですね。
重要な点は、Linux仮想マシンはDocker Desktopによって完全に管理されるということです。
つまり、Docker Desktopが裏で色々とやってくれるおかげで、ユーザは仮想マシンの存在を意識することなく、あたかも直接コンテナを操作しているかのように、作業できるわけです。
さいごに
Windows/Macでは裏でLinux仮想マシンが稼働していることがわかりました。
仮想マシン上のコンテナを操作していることを考えると、動作が重くなるのでは?という疑問が浮かびます。
このあたりは、非常に軽量なLinuxマシンを使用したり、Docker Desktopの設計によって、高速性を担保しているようです。
コメント