連載
» 2020年11月20日 05時00分 公開

Windows 10 The Latest:Windows 10 Homeでも使えて、インストールも超簡単な「Docker Desktop for Windows」登場 (1/2)

紆余曲折を経て、Windows 10に本物のDocker環境「Docker Desktop for Windows」が提供された。ハードルが高く感じていて手が出せなかったWindowsユーザーも、現在のDocker Desktopならば、簡単に試すことができる。そこで、Windows OS上のDockerの歴史からDocker Desktop for Windowsの使い方までを紹介しよう。

[塩田紳二,著]

この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。

「Windows 10 The Latest」のインデックス

連載目次

Windows 10 Homeでも使える本物のDockerの提供開始 Windows 10 Homeでも使える本物のDockerの提供開始
DockerのコンテナリポジトリであるDocker Hubでは、歴史的な経緯からWindows ServerやIISが提供されている。本物のDocker環境「Docker Desktop for Windows」との関係などを整理する。

 コンテナ仮想化を用いたアプリケーションの開発/実行環境である「Docker(ドッカー)」を試したことはあるだろうか。Windowsユーザーの場合、Hyper-VやVMwareといった仮想マシン環境は使ったことがあっても、Dockerを普段から利用しているという人はまだ少ないだろう。手元のWindows環境で試してみたかったけれど、「何やら複雑そうで手が出なかった」という人もいると思う(これはWindows OS上のDockerのサポートが二転三転したことも一因だろう。詳しくは後述)。

 しかし、「Windows Subsystem for Linux 2(WSL 2)」により、Windows 10上で互換性の高いLinux環境の構築が可能となったことで状況は大きく変わった。このWSL 2の提供によって、Dockerのサポートも大きく変更され、現在配布中の「Docker Desktop for Windows」は、Windows 10上で動作するのはもちろん、Windows特有の事情が少ない、いわば「普通のDocker」になっている。Windows 10 Homeで利用できる点もありがたい。

 今回は、Dockerに興味はあるけれど、使ったことがほとんどない人を対象にWindows OS上のDockerの歴史を整理した上で、「Docker Desktop for Windows」をインストールして実際に動かす方法を解説していく。Docker自体やコンテナの概念については、「超入門Docker 第1回 Dockerとは」を、WSL 2については「完全なLinuxがWindows 10上で稼働する? 『WSL 2』とは」をそれぞれ参照していただきたい。

なぜWindows OSのDockerは混乱したのか?

 簡単にいうと、Windows OSには複数のコンテナ実装技術があり、これらを操作するためのDockerが複数あったからだ。複数に分かれてしまったのは、段階的にMicrosoftの戦略が変化し、その過程でコンテナ実装と複数のDockerコマンド実装が行われたからだ。つまり、幾つものDockerとコンテナがあって、その話が個別に語られていたため、Windows OSのDockerは混乱しているように見えてしまった。

  Windows上のDocker
  MS Docker Docker for Windows Docker Desktop Docker On WSL 2
  Microsoftがライセンスを受けて搭載したWindows Server用Docker Enterprise Edition Docker社が開発したWindows用のDocker。現在はDocker Desktopに切り替わっている Docker社が開発した新しいWindows用Docker。Docker for Windowsの後継 WSL 2のLinux上で動作する「普通」のDocker
Windows上のコンテナ Windowsコンテナ Microsoft独自のコンテナ実装。WindowsをベースイメージとしてWindowsアプリケーションが動作する。仮想マシンとプロセス分離の2種類ある ×
Linuxコンテナ 仮想マシンを使ったLinux実行環境。Hyper-VでLinuxを動かしDockerコンテナを実行する △(実験的機能として提供。正式提供は行われなかった) ○(Hyper-Vバックエンドを使う場合) ×
Dockerコンテナ オリジナルのDockerが扱うネイティブのコンテナ × ×
備考 MS DockerでのLinuxコンテナの実行は実験機能として提供されているが、公式機能にはなっていない 切り替えてどちらかを利用 切り替えてどれか1つを利用。WSL 2バックエンド機能がデフォルトで、Dockerコンテナが動作する WSL2は通常のLinuxとほぼ同じなので、普通のDockerが動く
提供時期 2016年10月リリース(Windows Server 2016向け) 2019年5月リリース 2020年5月(Windows 10バージョン2004から正式対応) 2020年5月(Windows 10バージョン2004から利用可能)
Windows OSで利用可能なDockerとコンテナの種類
現在のWindows 10にはDockerが4種類、コンテナが3種類ある。Docker DesktopとDocker on WSL 2に関しては、Windows 10のInsider Preview版でWSL 2が利用可能になったことから、2019年から利用できるようになっている。

 説明をする前に用語を整理しておこう。LinuxのDockerが扱っているコンテナを「Dockerコンテナ」と呼ぶことにする。特にこう呼ぶのは、Windows OSにも別の実装によるコンテナがあるからだ。これを「Windowsコンテナ」という。Windowsコンテナには、「プロセス分離モード」と「Hyper-V分離モード」の2種類がある。ちなみに、これらは以前「Windows Serverコンテナ」と「Hyper-Vコンテナ」と呼ばれていた。

「Windowsコンテナ」はMicrosoft固有の技術

 「Windowsコンテナ」は、Microsoft固有の技術でDockerコンテナとは異なる実装だが、これらの管理や制御に「Dockerコマンド」が使われていた。当初は、独自のコマンドを用意したが、Docker社と提携し、Windows Serverで「Windowsコンテナ」用のDockerコマンドを利用できるようにした。Windows Server 2016から利用可能になったものは、Docker Enterprise Edition(EE)のライセンスを受けたものであったため、「Docker」であることは違いないが、LinuxのDockerとは管理対象のコンテナが違うものだった。これをここでは仮に「MS Docker」と呼ぶ(1つ目のDocker)。このMS Dockerは、Windows Server 2016以降のWindows Serverで利用可能だ。

 MS Dockerの開発にあたり、MicrosoftとDocker社は提携したことで、各種コンテナが集積/公開されているサービス「Docker Hub」には、Windowsコンテナも置かれるようになった。現在でも見ることができる「IIS(Internet Information Services。WindowsのHTTPサーバ)」や「Windows Server Core」は、このWindowsコンテナである。

「Linuxコンテナ」は仮想マシン上で動作する

 Microsoftは、Dockerコンテナを動かすためにLinuxを含む仮想マシンを作り、これをコンテナとして扱えるようにした。これはWindowsでは「Linuxコンテナ」と呼ばれる。Linuxコンテナは、仮想マシンだが、その元になるイメージは「Dockerコンテナ」用のものだ。これは、Hyper-V仮想環境ハイパーバイザーの上で動くため、Dockerコンテナと比べて、「起動に時間がかかる」「リソースを消費する(例えば、必要メモリ量が多くなる)」といったデメリットがあった。

 一方でMicrosoftと提携したDocker社は、Windows OSに対応したHyper-V上で動作する「Docker for Windows」をリリースする。これは、「Windowsコンテナ」と「Linuxコンテナ」を扱うものだ。これもDockerである(2つ目のDocker)。

WSL 2に対応する「Docker Desktop for Windows」の登場

 また、Windows 10には、Linuxプログラムを動作させるWSLがある。これは、ほぼLinux環境でだいたいのLinuxアプリケーションを動作させることができる。しかし、最初にリリースされたWSL 1は、Linuxカーネルをエミュレーションしていた関係でDockerなど一部のLinuxソフトウェアは動作できなかった。

 その後、Microsoftは「軽量ユーティリティー仮想マシン」という実行環境を使い、本物のLinuxカーネルを使うWSL 2を開発した。これは、Dockerを含むほとんどのLinuxプログラムが動作する。このため、Linuxで一般的に利用されているDockerをWSL 2にインストールして動作させることができるようになった。ここにもDockerがある(3つ目のDocker)。

 そして、WSL 2に対応して作られたのが「Docker Desktop for Windows」(以後、Docker Desktopと記す)である(4つ目のDocker)。DockerクライアントやGUIはWindows上で動作するが、エンジンとコンテナはWSL 2側にある。

Windowsには4つのDockerと3種のコンテナがある

 そういうわけで、現在のWindowsには4つのDocker、3種のコンテナがあるわけだ。どれも「Docker」であり、どれも「コンテナ」である。これらは時差を置いて作られてきたものであるため、インターネットにある記事は、ある時点での情報とすれば、必ずしも間違いではないが、現状とはそぐわない記述になってしまったものも多数ある。

 最新のDocker Desktopは、普通にDockerコンテナを操作できるが、過去との互換性もある。Docker Desktop for Windowsの説明を読み進める前にこうした状況を理解しておいてほしい。

Docker Desktopとは?

 Docker Desktopは、Docker社が開発したWindows 10用のDockerだ。これを使うのは簡単だ。インストーラーを「Dockerのサイト」からダウンロードしてインストールするだけである(インストール方法は後述)。起動すると、GUIのウィンドウが開くが、これは「Docker Desktop.exe」(ファイル名にスペースが入っている点に注意)というプログラムで、稼働中のコンテナの状態などを示し、コンテナの停止や再開、廃棄が可能だ。

Docker Desktop.exeの画面 Docker Desktop.exeの画面
Docker Desktop.exeは、ウィンドウを持ち、設定やDocker Hubへのログインが行えるほか、稼働中のコンテナの状態を表示するプログラム。Dockerクライアントに相当するプログラムだが、こちらは本体ではない。更新の確認などの操作はインジケーター領域にある[Docker]アイコン側で行う。

 しかし、ここではコンテナを作成することはできず、コマンドラインからDockerコマンドを使う。Dockerクライアントの設定は、タスクバーの右側にあるタスクトレー領域に表示される[Docker]アイコンから行う。ここがDockerクライアントの本体で、Docker Desktopのウィンドウは単にコンテナ状態などを表示しているのにすぎない。

インジケーター領域にある[Docker]アイコンのメニュー インジケーター領域にある[Docker]アイコンのメニュー
インジケーター領域にある[Docker]アイコンが、Dockerクライアントの本体で、ここにあるDockerメニューから設定や再起動などの全ての操作が行える。

 Dockerコマンドは、Linux上のものと基本的に同じだ。ただし、Docker Desktopでは、シェルがコマンドプロンプト(cmd.exe)またはPowerShellになる。どちらもWindows 10では標準のコマンドラインインタープリタだが、bashなどとは引数展開やヒストリ展開などに違いがあるため、Linuxに慣れたユーザーは、この点に戸惑うかもしれない。こうした場合、WSL 2を使いbashからDockerを使う方法もある。

 Docker Desktopは、専用のWSL 2環境を持つ。WSLは、LinuxディストリビューションのWSL用イメージを使って、Linux環境を作る。UbuntuやOpen SUSEなど複数のディストリビューションがこれに対応している。WSLでは、個々のディストリビューションは、1つだけしかインストールすることができず、そのインスタンス(実行状態)は1つだけしか動かない。このため、WSLでは稼働しているLinuxの実行イメージを単に「ディストリビューション」と呼ぶ。現状は、Linuxのコンソールのみ利用可能なので、複数セッションを開くことは可能だ。

 Docker Desktopは標準で、「docker-desktop-data」と「docker-desktop」という2つのディストリビューションをインストールする(これらをWSL 2バックエンドと呼ぶ)。コンテナの実行は、「docker-desktop」側で行われる。

 既存のWSL 2用ディストリビューションでDockerクライアントを起動することもできる。これは、Docker Desktop.exeの設定画面からセットアップできる。注意が必要なのは、この設定は、WSL 2ディストリビューションからDocker Desktopを制御するクライアントを利用できるようにするもので、コンテナの実行環境にするものではないという点だ。どの場合もDocker Desktopが作るWSL 2バックエンドがコンテナの実行環境になる。WSL 2のディストリビューション上でDockerコンテナを実行させたい場合には、ディストリビューション内でパッケージマネージャーコマンドを使ってDockerをインストールする必要がある。

WSL 2のLinuxディストリビューションでDockerを利用可能にする設定 WSL 2のLinuxディストリビューションでDockerを利用可能にする設定
既にWSL 2を利用している場合、インストールしているLinuxディストリビューションからもDockerを使いたい場合は、この設定画面でWSLのLinuxディストリビューションを追加する必要がある。この設定で、WSLのLinuxディストリビューションからDockerクライアントが利用可能になり、Docker Desktopと同じDockerエンジンを利用できるようになる。

 コンテナの実行は、デフォルトでは、WSL 2バックエンドで行われる。ただし、設定によりHyper-V仮想マシンでLinuxを起動する「Linuxコンテナ」(Docker DesktopではHyper-Vバックエンドと呼ぶ)も利用できるし、Windowsコンテナの制御用にも切り替えることは可能だ。切り替えは、タスクバーの[Docker]アイコンの右クリックメニューにある[Switch to Windows containers]で行う。

 しかし、これはDocker Desktopのモードを切り替えて行うため、同時に起動管理できるのはこのうちのどれか1つで、複数のコンテナ実装技術を混在して起動させることはできない。Docker Desktopでは、デフォルトでWSL 2バックエンドが選択されている。ちなみに、[Settings]−[General]−[Use the WSL 2 Based Engine]を「オフ」にしてHyper-VバックエンドにするとDocker Desktopウィンドウが開かなくなるが、インジケーター領域の[Docker]アイコンから設定にアクセスできるので問題はない。

       1|2 次のページへ

Copyright© Digital Advantage Corp. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。