Windows 11にDocker Desktopを入れる手順（令和5年最新版）

# 概要

Windows 11 で Docker Desktop を動かすまでの手順を、比較的初心者を対象とし、順を追って作業できるようにまとめました。

# 背景など

こんにちは、Docker Captainをしている @zembutsu です。この記事は[さくらインターネットAdvent Calendar 2023の4日目の記事](https://qiita.com/advent-calendar/2023/sakura)として書きました（気づいたら枠が空いていたので差し込みました）。

まっさらな状態のWindows 11を手に入れ、Docker Desktopを入れ直す機会があり、ついでにセットアップ手順も確認しました。

# Docker Desktop for Windows 11 が動くPCとは


ドキュメントのシステム要件[^1] によると、Windows 11で動かすには：

- Windows 11 64bit: 21H2 以上（Home、Pro、Enterprise、Educationの各エディション）
- メモリ 4GB
- BIOS/UEFI でハードウェア仮想化に対応(hardware virtualization)

とあります。メモリは、そもそも Windows 11 自身が 4GB を動作環境としていますので、普通に Windows 11 が動けば特に気にする必要は無いでしょう。ハードウェア仮想化に対応しているかどうかは使っている CPU に依存します。もし BIOS/UEFI で無効になっていれば、有効化が必要です。

[^1]: https://docs.docker.com/desktop/install/windows-install/#system-requirements

動作要件を満たしていれば、Docker Desktop のダウンロードとインストールに進みます。

:::note info
以前のDocker Desktopは、事前にWSL2やカーネルファイル等のセットアップや設定が必要でした。WSL2とは、Windows Subsystem for LinuxはWindows上でLinuxを動かすための仕組みです。現在は、WSL2が入っていなくても、Docker Desktopのインストール中に自動でセットアップされます。
（詳しい方向けの補足情報：デフォルトではUbuntuがセットアップされます。他のLinuxディストリビューションを使いたい場合は、この段階で手動でもセットアップ可能です。また、自分でディストリビューションを決めた場合、Docker Desktop側でのWSL自動更新機能は無効にするかどうかの検討も必要です。）
:::


# Docker Desktop for Windows のダウンロードとインストール

## ダウンロード

インストールをするには、Docker Desktopをインストールするプログラム（インストーラー）が必要です。Docker のウェブサイト https://www.docker.com/get-started/ からファイルをダウンロードできます。ページを開くと、次のような画像が開きますので【 Download for Windows 】（Windows用をダウンロード）をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/13002/f4b1273f-500a-af8a-9f8f-7c2aa4a0506a.png)

ブラウザでダウンロード始まり、終われば「ダウンロード」フォルダにファイルが入っています。エクスプローラーを起動して、「ダウンロード」を開くと、次のように【 Docker Desktop Installer 】のアイコンが見えますので、これをクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/13002/e11cd2ab-f781-412b-5a0c-0837605f69d9.png)

## インストール

プログラムを起動すると、Windows の警告画面「ユーアーアカウント制御　このアプリがデバイスに変更を加えることを許可しますか？」という画面が出ます。「信頼済みの発行元：」が【 Docker Inc 】と表示されているのを確認した上で【 はい 】を選びます。インストール途中、もう一度この画面が出たら、同じように【 はい 】を押します。

しばらくすると、次のように設定画面が出ます。以下2つの項目にチェックが入っています。

- 「Use WSL 2 instead of Hyper-V (recommended)」（Hyper-Vの代わりにWSL 2 を使う：推奨）
- 「Add shortcut to desktop」（デスクトップにショートカットを追加）

すでに Hyper-V を使っている場合は、クリックしてチェックを外します。まっさらな状態からのインストールであり、特に理由も無ければ、そのまま WSL 2 を使う設定で大丈夫です。また、デスクトップのショートカットが不要であれば、外しておきます。

確認したら【 OK 】をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/13002/0779f6ba-bbf5-7b2f-a388-734c255fb03d.png)

あとは、自動的にインストールが進行します。WSL が入っていない場合は、画面の後ろ側でインストール作業をしています。時間が多少かかるかもしれませんが、完了するまで画面をそのままにして待ちます。

インストールに成功すると、「Installation succeeded」（インストール成功）を表示されますので、【 Close and restart 】（閉じて再起動）をクリックして、PCを再起動します。もし何か作業中で保存していないものがあれば、再起動前に保存するのをお忘れなく。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/13002/cfa37c56-0f9c-335f-a508-c2ca9f63c620.png)

## PC再起動後のセットアップ

再起動が終わると、自動的に Docker Desktop が起動します。そして「Docker Subscription Service Agreement」が表示されます。これはサブスクリプションの使用許諾で、概要は次の通りです。


- Docker Desktop は、 中小企業 （従業員 250 人未満、かつ、年間売上高が 1,000 万米ドル未満）、個人利用、教育、非商用オープンソースプロジェクトは無料です。
- それ以外の場合は、サブスクリプションの支払が必要です。
- 行政機関もサブスクリプションの支払が必要です。
- Docker Pro、 Team、Business サブスクリプションには、 Docker Desktop の商業的利用を含みます。


内容を確認して【 Accept 】（受け入れる）をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/13002/8474c37f-8879-c085-d7d7-6407d847ca41.png)

次に、インストールの最後で WSL 2 の自動更新をするか手動更新を行うか画面に表示されます。ここでは、特に理由がなければ、そのまま【 Finish 】をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/13002/763def4f-84c2-4e48-30bd-ab017c7e0ced.png)


## Docker Desktop を操作する前に

作業はあと少しです！

次は「Welcome to Docker Desktop」（Docker Desktop へようこそ）と表示されます。Docker Hub の ID を持っている場合は「Sign up」をクリックしてログインできます。ID を持っていない場合は【 Continue without signing in 】（サインインせずに継続）をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/13002/e2212ad0-d785-13b5-8fd3-e3b5d93bcb6b.png)

そして、最後にアンケートが表示されます。「Tell us about the work you do」（どんなお仕事をしているか教えてください）と出ていますので、「What's your role?」（どんな役割？）のメニューから、必ず何かしらを選択します。そして【 Continue 】をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/13002/04365d82-384c-1645-9caf-1258c5d7e13d.png)

これでセットアップは完了です！ Docker Engine（Dockerコンテナやイメージを操作するプログラム）が起動中の表示に変わります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/13002/297e6217-f74c-b2ac-944c-e2b03ae232a5.png)

次の画面に切り替われば、Docker Desktop を操作できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/13002/647c3a7d-396b-2b7b-b3c4-c1b3a9b0d00c.png)


## hello-world コンテナの実行

実際にコンテナが動くかどうか見てみましょう。虫眼鏡マークの検索ボックスで `hello-world` と入力すると、バッジのような公式マークが付いたイメージが見えます。これが Docker 公式イメージ(Official image）と呼ばれるものです。この列の右端の【 Run 】をクリックすると、コンテナを実行できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/13002/bc07f7e2-a6c8-40a8-a7d9-054f236471b5.png)

次の画面では詳細オプションを設定できます。ここでは、そのまま【 Run 】（実行）をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/13002/d4eec60c-0c30-ed37-739e-0279c686db43.png)

あとは、自動的に `hello-world` Docker イメージをダウンロードし、このイメージを使う Docker コンテナを実行します。このコンテナは文字を出すだけですので、次のようにログの画面で実行結果を確認できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/13002/f5833bb2-fd2b-68ea-ec4d-2744378fadfd.png)


## nginx コンテナの実行と、ファイアウォール設定の許可

もう1つコンテナを動かしてみましょう。Nginx の Docker イメージを使い、コンテナとして動かし、さらにブラウザで開きます。

先ほどと同様に、検索ボックスに `nginx` を入れます。検索したら、公式 Nginx イメージを見つけ【 Run 】をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/13002/746ba401-0e5b-8b71-91fb-b089ced5d410.png)

先ほどの手順とは異なり、【 Optional settings 】（オプション設定）をクリックします。そして出てくる項目のうち「Host port」に【 80 】を入れ、【 Run 】をクリックします。（すでにPC上でポート 80 を使用するプログラムを実行していると使えませんので、8080 など別の番号にします）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/13002/facc50eb-3e24-494c-11a8-63c98d9e94bd.png)

すると、次は「パブリック ネットワークとプライベート ネットワークにこのアプリへのアクセスをきょかしますか？」と表示が出ます。次の画面のように発行元が「Docker Inc.」と出ているのを確認し、【 許可 】をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/13002/d8c688de-1274-d07e-b3cd-2076db812013.png)


Nginx Dockerイメージをダウンロードした後、コンテナが起動します。次の画像のように、【 80:80 】と書かれているリンクをクリックします。この意味は、ホスト側、つまりPC側のポート 80 をコンテナ内のポート 80 に接続（マッピング）する意味があります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/13002/d3d48126-fe80-f3cb-2bc5-e2f00ee866f7.png)

リンク先をブラウザで開くと、次のように Nginx の初期画面が表示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/13002/5e509b3d-fbc1-6300-2f41-0c0c4de709e3.png)

使用が終わったコンテナは「Actions」列にあるボタンをくりくし、停止・削除できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/13002/107e9874-56ed-0cd4-81e9-9c086d373b53.png)

## セットアップが終わったら？

「ハンズオンガイド」や「始め方」の公式ドキュメントの日本語訳がありますので、そちらを読み進めて慣れてみてはいかがでしょう。

- [Docker Desktop ハンズオンガイド](https://docs.docker.jp/get-started/what-is-a-containe.html)
- [始め方 - Get started](https://docs.docker.jp/get-started/toc.html)

Enjoy!


# 補足：「WSLでUbuntuを使いたいのですが？」

今回の手順インストールする WSL では、 `docker-desktop` と `docker-deskto-data` という名前の、 Docker Desktop を動かすことに特化した[^2] Linux ディストリビューションが自動的にセットアップされます。

[^2]: https://docs.docker.com/desktop/wsl/#enabling-docker-support-in-wsl-2-distros

```
> wsl --list
Linux 用 Windows サブシステム ディストリビューション:
docker-desktop (既定)
docker-desktop-data
```

このように、何らかの Linux ディストリビューションが入っているかのように見えますが、実際の開発用とでは使えないでしょう。たとえば、 `apt` や `dnf` といったお馴染みのコマンドは使えません。

それでは、どのようにして Ubuntu を WSL で使えば良いのでしょうか。手順は2つあります。

## Windows ストアで Ubuntu を探す

1つは、Windows ストアで Ubuntu を探します。アプリ「Windows Store」を起動し、検索画面で「Ubuntu」と入力します。【 入手 】をクリックするとダウンロードが始まります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/13002/a0d0d098-9f2a-746b-d213-06f19f028c37.png)

ダウンロードが終わったら、【 開く 】のボタンを押します。

ボタンを押すと、Ubuntu を初めて動かすための設定（初期化）が行われます。次のような画面が出てきたら「Enter new UNIX username:」（新しいUNIXユーザ名の入力）で、好きなユーザ名をに入力します（英語・数字・一部の記号）。これが、通常 Ubuntu 内で操作を行う（権限を持つ）ユーザ名になります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/13002/8f6a74fc-adb4-ee98-913f-eac62a3056ec.png)

その次の「New password:」と「Retype new password:」では、そのユーザ用のパスワードを設定します（ `sudo` コマンドを使うときにも、このパスワードを入力します）。ここではキーボードを操作しても画面には文字が出ません。入力後に「エンターキー」を押します。確認用のパスワードと含めて、同じ文字列を二度入力します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/13002/d6042f7c-cace-dfbd-5282-ebcc4f225ee9.png)

入力が正しければ、「この操作を正しく終了しました。」と出て、もう少し待てば Ubuntu が使えるようになります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/13002/9b7798e4-058a-3fe3-42b2-682575e870a1.png)

以上で Ubuntu のセットアップは完了です。

しかし、これだけでは Ubuntu 内で `docker` コマンドが使えません。普通に使えるようにするには、次の手順に進みます。

## WLS のデフォルトディストリビューションを Ubuntu に変更する

これまでの手順を進めてきた場合、デフォルトでは WSL 内では `docker-desktop` がデフォルトの WSL 用ディストリビューションです。 `wsl -l -v` コマンドを実行すると、次のように入っているディストリビューション一覧が表示されますが `docker-desktop` に `*` 印が付いており、これがデフォルトと分かります。

```
> wsl -l -v
  NAME                   STATE           VERSION
* docker-desktop         Running         2
  docker-desktop-data    Running         2
  Ubuntu                 Running         2
```

これを変更するには、コマンド `wsl --set-default ubuntu` と入力します。

```
> wsl --set-default ubuntu
この操作を正しく終了しました。
```

それから、再度ディストリビューション一覧を表示すると、今度は `ubuntu` に `*` マークが付いていて、設定の切り替わりを確認できます。

```
> wsl --list
Linux 用 Windows サブシステム ディストリビューション:
Ubuntu (既定)
docker-desktop-data
docker-desktop
```

あとは、Windows メニューから `wsl` を起動すると、`ubuntu` にログインした状態の画面が開き、かつ、 `docker` コマンドも使えるようになります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/13002/a5570841-607c-c032-a539-3c5b0ddbcb49.png)



Enjoy!

## 関連情報

- Using Dev Containers in WSL 2
  - https://code.visualstudio.com/blogs/2020/07/01/containers-wsl