最近はWindowsやMacを使っていてLinux環境を利用したいときには、無料で使える Docker Desktop でLinuxコンテナを使うというのが定番になっているような気がしないでもない。というわけで、Windows 10 に "Docker Desktop for Windows" をインストールする方法をまとめてみた。
ところで、最近の Docker Desktop は Hyper-V を使わなくても大丈夫らしいので (使うこともできるらしいが)、使わない方法でインストールした。代わりに WSL 2 を使うらしい。これだと、Oracle Virtualbox との併存、両立というか同時に使用ができる (と思ったんですが、おそらくCPUによってできたりできなかったりするみたい)。また、Hyper-V は Proエディション以上にしかなく、Homeエディションでは今まで Docker Desktop は使えなかったのが、今では使えることになる。
システム要件
公式ドキュメントにあるように、
- Windows 10, version 1903 以上
- 「Windowsの機能」で「Linux用Windowsサブシステム」および「仮想マシンプラットフォーム」が有効になっていること
- SLAT対応の 64bit CPU
- メインメモリ4GB以上
- BIOS上で仮想化機能が有効になっていること
の模様。
今回インストールしたマシンは、
- Windows 10 Pro, version 20H2
- CPU: Intel Core i9 9820X
- RAM: 128GB
です。
事前準備
BIOS上で仮想化機能が有効になっているかの確認
Windows上から仮想化が使えるかどうか確認します。「Ctrl + Shift + Esc」キーでタスクマネージャーを開き、「パフォーマンス」タブの「CPU」の項目で、「仮想化」が「有効」になっていれば大丈夫です。なっていない場合は、BIOSの仮想化機能を有効に設定してください。設定方法はPCにより異なるため、ウェブサイトやマニュアルを参考にしてください。例えば、Intel製のCPUを搭載したPCなら「Intel® Virtualization Technology」などです。
Windowsの機能の有効化
「プログラムと機能」の「Windowsの機能の有効化または無効化」から行ってもいいのだけれど、ここではPowerShellを用いて、「Windowsの機能」の「Linux用Windowsサブシステム」および「仮想マシンプラットフォーム」を有効にします。
「Windows」キーを押したあと、「powershell」と入力し、「Ctrl + Shift」キーを押しながら「Enter」キーを押します。これで、管理者権限でPowerShellが起動します。
Linux用Windowsサブシステム (Windows Subsystem for Linux: WSL) を有効化します。
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux -NoRestart
仮想マシンプラットフォームを有効化します。
Enable-WindowsOptionalFeature -Online -FeatureName VirtualMachinePlatform -NoRestart
WSL 2 を既定のバージョンに設定する
wsl --set-default-version 2
WSL 2 Linux カーネルの更新
このページを参考に、更新プログラムをダウンロード&実行し、WSL 2 のLinuxカーネルを更新する。
PCを再起動します。
インストーラーのダウンロード
公式サイトから "Docker Desktop for Windows (Docker Desktop Installer.exe)" をダウンロードします。
インストールの実行
ダウンロードしたインストーラーを実行します。特に設定や変更する項目はないのでそのまま進めます。
"Close and restart" ボタンを押して、再起動します。
Dockerが正常に起動すると、
のようなチュートリアル画面が表示されます。
動作確認
ここではすごく簡単に、Nginxというウェブサーバのコンテナを起動して動作確認をしたいと思います。
まず、PowerShellを起動します。次に以下のコマンドを実行します。
docker container run -d --name test-nginx -p 80:80 nginx
実行時に、Windowsファイアウォールの警告が出るかもしれないので、アクセスを許可しください。このコマンドはつまり、
- コンテナを起動しろ
- バックグラウンド (デーモン) で
- コンテナの名前は test-nginx とする
- ホストの80番ポートをコンテナの80番ポートにマッピングしろ
- イメージは nginx (のlatest) を使え
という意味になります。PowerShellのプロンプトが返ってきたら、ブラウザでlocalhost
にアクセスしてみます (httpのデフォルトが80番ポート)。
無事に表示されました。
また、Docker Desktop の Dashboard を開いてみると、"Containers/Apps" に今起動した、test-nginx
があるのが分かります。一方、"Images" には今回のコンテナの元になったnginx
イメージがあるのが分かります。
test-nginx
コンテナは動作確認できたので、削除しておきます。nginx
イメージももう使わないなら削除してしまってもいいです。
今回はここまでです。