紆余曲折を経て、Windows 10に本物のDocker環境「Docker Desktop for Windows」が提供された。ハードルが高く感じていて手が出せなかったWindowsユーザーも、現在のDocker Desktopならば、簡単に試すことができる。そこで、Windows OS上の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が複数あったからだ。複数に分かれてしまったのは、段階的に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から利用可能) | |||
説明をする前に用語を整理しておこう。LinuxのDockerが扱っているコンテナを「Dockerコンテナ」と呼ぶことにする。特にこう呼ぶのは、Windows OSにも別の実装によるコンテナがあるからだ。これを「Windowsコンテナ」という。Windowsコンテナには、「プロセス分離モード」と「Hyper-V分離モード」の2種類がある。ちなみに、これらは以前「Windows Serverコンテナ」と「Hyper-Vコンテナ」と呼ばれていた。
「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コンテナである。
Microsoftは、Dockerコンテナを動かすためにLinuxを含む仮想マシンを作り、これをコンテナとして扱えるようにした。これはWindowsでは「Linuxコンテナ」と呼ばれる。Linuxコンテナは、仮想マシンだが、その元になるイメージは「Dockerコンテナ」用のものだ。これは、Hyper-V仮想環境ハイパーバイザーの上で動くため、Dockerコンテナと比べて、「起動に時間がかかる」「リソースを消費する(例えば、必要メモリ量が多くなる)」といったデメリットがあった。
一方でMicrosoftと提携したDocker社は、Windows OSに対応したHyper-V上で動作する「Docker for Windows」をリリースする。これは、「Windowsコンテナ」と「Linuxコンテナ」を扱うものだ。これもDockerである(2つ目のDocker)。
また、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種のコンテナがあるわけだ。どれも「Docker」であり、どれも「コンテナ」である。これらは時差を置いて作られてきたものであるため、インターネットにある記事は、ある時点での情報とすれば、必ずしも間違いではないが、現状とはそぐわない記述になってしまったものも多数ある。
最新のDocker Desktopは、普通にDockerコンテナを操作できるが、過去との互換性もある。Docker Desktop for Windowsの説明を読み進める前にこうした状況を理解しておいてほしい。
Docker Desktopは、Docker社が開発したWindows 10用のDockerだ。これを使うのは簡単だ。インストーラーを「Dockerのサイト」からダウンロードしてインストールするだけである(インストール方法は後述)。起動すると、GUIのウィンドウが開くが、これは「Docker Desktop.exe」(ファイル名にスペースが入っている点に注意)というプログラムで、稼働中のコンテナの状態などを示し、コンテナの停止や再開、廃棄が可能だ。
しかし、ここではコンテナを作成することはできず、コマンドラインからDockerコマンドを使う。Dockerクライアントの設定は、タスクバーの右側にあるタスクトレー領域に表示される[Docker]アイコンから行う。ここがDockerクライアントの本体で、Docker Desktopのウィンドウは単にコンテナ状態などを表示しているのにすぎない。
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バックエンドで行われる。ただし、設定により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]アイコンから設定にアクセスできるので問題はない。
Copyright© Digital Advantage Corp. All Rights Reserved.