Win11+WSL2にDocker Desktopをインストール
WSL2が公開されて以来、Windows版DockerもWSL2上で動くようにバージョンアップされました。従来のDockerに比べて、WSL2バックエンドなDockerは、起動が速く軽量、などの特徴があるそうです。
以前、Windows 10のWSL2環境にDocker Desktopをインストールする記事を書きましたが、その時に比べてWindowsのInsider Preview版ではWSL2のセットアップも簡易化され、手順が変わっています。
ということで、Windows 11のInsider Preview版を例にとって、WSL2バックエンドなDocker Desktopをインストールする方法をまとめました。
まえがき
本記事は、Windows 11 Pro Insider Preview(ビルド22000.71)で確認しています。プレビュー版ですので、今後手順が変わる可能性があることをご了承ください。
また、この記事は、記事執筆時点のWindows 10 Insider PreviewやWindows 11を前提に記述しています。現時点の通常リリース版であるWindows 10 21H1ではできない箇所もありますので、21H1をご利用の方は、こちらの記事をご覧ください。
Windows 11にWSL2をインストール
Docker DesktopはWSL2上で動作しますので、まず始めにWindows 11にWSL2を入れる必要があります。
WSL2の初期セットアップに関してはこちらの記事にまとめています。この記事の「WSL2 と Ubuntu 20.04 を インストール」の項を事前に行ってください。
上記記事では、Ubuntu 20.04を指定してインストールを行っていますが、Docker Desktopを使う上では何のディストリビューションを入れていても構いません(Docker Desktop専用ディストリがインストールされますので、Ubuntu等は不要です)。ですので、特にこだわりがなければ、インストールのコマンドはwsl --install
だけでも構いません。この場合、無印の「Ubuntu」ディストリがインストールされます。
次の画面の所まで進んだら戻ってきてください。(このUbuntu画面はもう使いませんので、閉じて構いません)
Docker Desktopをインストール
WSL2のセットアップが終了したらDocker Desktopをインストールします。
ところで、Microsoftは現在、「Windows Package Manager(通称winget)」というパッケージ管理ソフトを開発中のようです。パッケージ管理ソフトといえば、Ubuntuならapt、CentOSならyumやdnfコマンドに相当するソフトです。このwingetを使えば、Windows上でもwinget install <アプリ名>
の1コマンドでアプリがインストールでき、Docker Desktopもインストール可能です。せっかくなので、今回はwingetを使ってDocker Desktopをインストールしてみたいと思います。
wingetは、Microsoftストアから「アプリ インストーラー」を最新版に更新すると使えるようになります。Microsoftストアのライブラリのページから各種アプリをアップデートするか、「App Installer」で検索して「アプリ インストーラー」を更新します(日本語で「アプリ インストーラー」と検索欄に入れても出てきませんので気をつけてください)。
「winget」が使えるか確認するため、スタートボタンを右クリックしてWindows Terminalを起動します。(今回は一般ユーザー権限で開いていますが、管理者権限で開くとDocker Desktopインストール時のUACメッセージが出なくなります)
PowerShellが立ち上がります。正常にwingetインストールされているか確認するため、winget -v
を実行してみます。下記のようにバージョン名が表示されたらOKです。
PS C:\> winget -v
v1.0.11591
続いて、Docker Desktopのパッケージ名を調べるため、winget search docker
を実行してみます。
PS C:\> winget search docker
名前 ID バージョン 一致
-------------------------------------------------------------------------
Docker Desktop Docker.DockerDesktop 3.5.2 Moniker: docker
eintopf mazehall.eintopf 1.3.2 Tag: docker
Compose Generator ChilliBits.ComposeGenera… 0.8.0 Tag: docker
Docker Desktop Edge Docker.DockerDesktopEdge 2.5.4.50534
SimpleDockerUI felixgborrego.simple-doc… 0.5.5
上記を見ると「Docker.DockerDesktop」パッケージをインストールすれば良さそうです。それをインストールするため、winget install Docker.DockerDesktop
を実行します。(単に「docker」と入力しても大丈夫ですが、念のためフルネームで指定しています)
PS C:\> winget install Docker.Desktop
インストール中、UACの昇格が必要になりますので、「はい」をクリックします。
しばらくすると、インストールが完了します。
インストールが終わったら、一旦パソコンを再起動します。
サンプルを動かしてみる
再起動後、自動でDocker Desktopが起動します。
下記の表示になったら起動完了です。今回はチュートリアルは省略しますので、「Skip tutorial」をクリックします。(前掲のWindows 10版Docker Desktopセットアップ記事では、チュートリアルも行っています。良ければご覧ください)
タスクバーにも、Docker Desktopのアイコンが表示されていると思います。コンテナ積みのクジラマークが表示されていれば、正常に動作しています。
タスクバーのクジラマークをクリックしても、Docker Desktopのダッシュボードを開くことができます。
最後に、サンプルのコンテナを動かしてみたいと思います。もう一度Windows Terminalを開いて、Docker Desktopの画面にあるコマンドを実行します。
PS C:\> docker run -d -p 80:80 docker/getting-started
Unable to find image 'docker/getting-started:latest' locally
latest: Pulling from docker/getting-started
540db60ca938: Pull complete
0ae30075c5da: Pull complete
9da81141e74e: Pull complete
b2e41dd2ded0: Pull complete
7f40e809fb2d: Pull complete
758848c48411: Pull complete
23ded5c3e3fe: Pull complete
38a847d4d941: Pull complete
Digest: sha256:10555bb0c50e13fc4dd965ddb5f00e948ffa53c13ff15dcdc85b7ab65e1f240b
Status: Downloaded newer image for docker/getting-started:latest
2865825f2c90733ecb786010b0b456da866c0f21d961dc8706087cd71ba2a24c
初回は、Windows セキュリティがファイアウォールの警告を出してきます。お使いのPC以外からDockerコンテナへのアクセスを受けたい場合は、適切に許可設定をしてください。
さて、Docker Desktopの画面に戻ると、Containers / Apps 画面に、サンプルイメージから作成したDockerコンテナが作成され、動作中の表示になっていると思います。ここからOPEN IN BROWSERボタンを押してWebページが正しく表示されたら、Docker Desktopのセットアップは問題なく完了です。
サンプルコンテナが不要でしたら、Docker Desktopの画面からDELETEボタンを押してください。Imagesの方にある、元になっているDockerイメージも不要なら削除して構いません。
DockerコンテナでCUDA(GPU)を使う
WSL2バックエンドでDockerを動かしていて、なおかつCUDA on WSLの設定を行っていれば、DockerコンテナでCUDAを使うこともできます。
次の記事でCUDA on WSLの設定方法を紹介していますので、この記事を参考にCUDA on WSLのセットアップを行ってください。
Docker DesktopとCUDA on WSLの両方の設定が終わったら、一度WSL2の再起動(もしくはパソコンの再起動)が必要のようです。UbuntuやDockerコンテナ等で未保存のものがないか確認して、wsl --shutdown
を実行します。
PS C:\> wsl --shutdown
上記コマンドで、Dockerも落ちます。「Docker Desktopを再起動するか」というトーストメッセージが出てきますので「Restart」をクリックします。
タスクバーのDocker Desktopアイコンが起動済みアイコン(コンテナが積まれたクジラマーク)になったら、早速GPUを使ってDockerコンテナを動かしてみたいと思います。
ここでは、CUDAツールキットのサンプルにあるnbodyを動かします。初回は、Dockerイメージのダウンロードのため、少し時間がかかります。
PS C:\> docker run --gpus all nvcr.io/nvidia/k8s/cuda-sample:nbody nbody -gpu -benchmark
Unable to find image 'nvcr.io/nvidia/k8s/cuda-sample:nbody' locally
nbody: Pulling from nvidia/k8s/cuda-sample
d519e2592276: Pull complete
d22d2dfcfa9c: Pull complete
b3afe92c540b: Pull complete
b25f8d7adb24: Pull complete
ddb025f124b9: Pull complete
fe72fda9c19e: Pull complete
c6a265e4ffa3: Pull complete
c931a9542ebf: Pull complete
f7eb321dd245: Pull complete
d67fd954fbd5: Pull complete
Digest: sha256:a2117f5b8eb3012076448968fd1790c6b63975c6b094a8bd51411dee0c08440d
Status: Downloaded newer image for nvcr.io/nvidia/k8s/cuda-sample:nbody
ダウンロードが終わったら、自動的にコンテナが作成され、nbodyが実行されます。下記のように結果が出てきましたので、問題なくGPUでDockerコンテナが動いているようです。
Run "nbody -benchmark [-numbodies=<numBodies>]" to measure performance.
-fullscreen (run n-body simulation in fullscreen mode)
-fp64 (use double precision floating point values for simulation)
-hostmem (stores simulation data in host memory)
-benchmark (run benchmark to measure performance)
-numbodies=<N> (number of bodies (>= 1) to run in simulation)
-device=<d> (where d=0,1,2.... for the CUDA device to use)
-numdevices=<i> (where i=(number of CUDA devices > 0) to use for simulation)
-compare (compares simulation results running once on the default GPU and once on the CPU)
-cpu (run n-body simulation on the CPU)
-tipsy=<file.bin> (load a tipsy model file for simulation)
NOTE: The CUDA Samples are not meant for performance measurements. Results may vary when GPU Boost is enabled.
> Windowed mode
> Simulation data stored in video memory
> Single precision floating point simulation
> 1 Devices used for simulation
GPU Device 0: "Maxwell" with compute capability 5.0
> Compute 5.0 CUDA device: [NVIDIA GeForce GTX 960M]
5120 bodies, total time for 10 iterations: 6.274 ms
= 41.781 billion interactions per second
= 835.611 single-precision GFLOP/s at 20 flops per interaction
NVIDIAのWSLユーザーガイドには、そのほかのサンプルの実行例も掲載されていますので、合わせてご覧ください。
参考サイト
Docker Desktopのインストールに関しては、こちらを参考にしました。Docker DesktopでCUDAを使う方法も紹介されています。
次のサイトは、wingetの紹介ページです。
こちらは、NVIDIAのCUDA on WSLのセットアップ記事です。こちらでも、Docker DesktopでCUDAを使う方法も紹介されています。
ディスカッション
コメント一覧
まだ、コメントがありません