Windows10 HomeでWSL2でDockerを使えるようにした話

Contents

概要

Windows 10 HomeにWSL2を入れてDockerをインストールして、簡単にhttpdのコンテナを起動して動作確認します。
バージョンを1909で開始しましたが、1909だとWSL2を入れられなかったので途中で2004に上げました。

主な参考URL

やっぱり参考にするのは公式でしょ?
Windows 10 用 Windows Subsystem for Linux のインストール ガイド

公式のコマンドで怒られた時に参考にしました。
WSL2の環境構築手順 – Qiita

Docker Desktopのインストール
Docker Desktop WSL 2 backend | Docker Documentation

評価環境

途中でバージョンを2004に上げてますが、開始時点では以下になります。
バージョンアップの手順も記載しています。

エディション    Windows 10 Home
バージョン  1909 → 2004

早速WSL2を有効化していきます。

機能の有効化

WSL 2 をインストールする前に、”仮想マシン プラットフォーム” オプション機能を有効にする必要があるらしい。公式サイトにはPowerShellで以下のコマンドで有効化して再起動するとある。
再起動しろっていう割に/norestartオプションついてるの?どういうオプションなんだろう。このオプション外すと自動的に再起動してくれるんかな?調べろって話か。

一応 Windows の機能の有効化または無効化 でどこが有効化されるか確認しておく。

win + R で OptionalFeatures一番下に「仮想マシン プラットフォーム」とあった。おそらくこれだろう。

有効化前

ではPowerShellを管理者権限で実行して以下のコマンドを実行する。

dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

実行前に「dism.exeってなに?」と思った人は以下のページをご覧ください。
DISM の概要

展開イメージのサービスと管理 (DISM.exe) は、Windows イメージを提供および準備するために使用できるコマンドライン ツールです。

https://docs.microsoft.com/ja-jp/windows-hardware/manufacture/desktop/what-is-dism

お、 Windows の機能の有効化または無効化 でチェック入った。

有効化後

OS再起動します。
再起動後、Windows の機能の有効化または無効化 は変化なし。

WSL 2 を既定のバージョンとして設定する

以下の公式のコマンドをそのまま実行するとコマンド ライン オプションが無効です: --set-default-versionと怒られた。

wsl --set-default-version 2

ここで手動で2004に上げる決意をする。
バージョンアップの手順は一番下の[手動で2004にバージョンアップ]をご参照ください。

私はアップデートに約40分かかりましたが、バージョンアップが完了しました。
win + R で winver でバージョンを確認してください。

Windows の機能の有効化または無効化 を念のため確認したところ、先の手順で有効化した「仮想マシン プラットフォーム」にはチェックが入ったままでした。

でも今まで表示されてなかった項目や名前が変わったっぽい項目もありますね。Windows Subsystem for Linux から名称が変わったであろう Linux 用 Windows サブシステム とか、簡易 TCP/IP サービス (echo、daytime など) などができていました。

さてここから元の手順の続きを行います。
まずはversion情報が出るか確認。

> wsl -l -v
  NAME            STATE           VERSION
* Ubuntu-18.04    Stopped         1

よし。ではWSL2を既定のバージョンに設定。

> wsl --set-default-version 2
WSL 2 を実行するには、カーネル コンポーネントの更新が必要です。詳細については https://aka.ms/wsl2kernel を参照してください

はいはい。表示されたURLにアクセスして詳細を確認します。
手順は以下のようなのでこれ通りにやります。

  1. 更新プログラム パッケージをダウンロード
  2. ダウンロードしたパッケージを実行
  3. 管理者特権のアクセス許可に「はい」

ダウンロードしたmsiファイルを実行したら以下のウィザードが表示された。
ちょっと切れてますが、Nextを押下して、ダイアログではいを押下して、Finishで終わりです。これはすぐ終わりました。

念のためPowerShellを立ち上げなおして再度WSL2を既定のバージョンに。

> wsl --set-default-version 2
WSL 2 との主な違いについては、https://aka.ms/wsl2 を参照してください

これでできたらしい。

既にインストール済みのディストリビューションをWSL2に設定する

--set-versionオプションを指定して1から2に設定します。設定するには名前が必要なので以下のコマンドで取得します。

wsl --list --verbose
# もしくは
wsl -l -v

# 実行結果
  NAME            STATE           VERSION
* Ubuntu-18.04    Stopped         1

Ubuntu18.04しか入れてなかったので、これだけでしたが、Ubuntu-18.04を使ってバージョンを変更します。

> wsl --set-version Ubuntu-18.04 2
変換中です。この処理には数分かかることがあります...

以下のように書かれているのでいつでもwsl1に戻せるようです。

<versionNumber> は、数字の “1” または “2” に置き換えてください。 上記と同じコマンドで “2” を “1” に置き換えて実行することにより、いつでも WSL 1 に戻すことができます。

https://docs.microsoft.com/ja-jp/windows/wsl/install-win10

変換が完了しました。と表示されて終了。
私の環境では2,3分でした。versionが2になっていることを確認します。

> wsl -l -v
  NAME            STATE           VERSION
* Ubuntu-18.04    Stopped         2

せっかくなのでDockerを入れてみる

Docker Desktopをインストールすればいいらしい。
Docker Desktop WSL 2 backend | Docker Documentation

Stableが2.3.0.2(2020/06/14時点)らしいので、それを利用する。
こちらからDocker Hub

ページ上部の「Get Docker」リンクか、少し下にある「Get Docker Desktop for Windows (stable)」のどちらでもOKです。リンク先は同じでした。
exeファイルをダウンロードして、それを実行します。

画面右下のOKボタンが消えてますが…

インストールが終わったらこんな感じ。ボタン押したらいきなりサインアウトしだすからびっくりした。書いてるんだけどね。

サインインすると画面右下にこんなポップアップが表示されてDocker Desktopが起動します。

「Start」ボタンを押下すると、チュートリアルが始まります。私はやってません。なぜならPowerShellでgitコマンドを使えるようにしていなくて怒られたから。

上記のチュートリアルが終わったら(skipしたら)「まだコンテナないよ!このコマンド実行してみて!」って以下のコマンドが用意されていた。かわいいやつめ。
特に意味はないけどPowerShellでやるつもりはあんまりなかったので、インストールしてたWSLを起動して実行した。

# コンテナ起動。これはDocker Desktopの画面に記載されていたコマンド。
$ docker run -dp 80:80 docker/getting-started
# 起動確認
$ docker ps
CONTAINER ID        IMAGE                    COMMAND                  CREATED              STATUS              PORTS                NAMES
c9f7ae06a4d4        docker/getting-started   "nginx -g 'daemon of…"   About a minute ago   Up About a minute   0.0.0.0:80->80/tcp   xenodochial_heisenberg

nginxが立ち上がってるのか。ブラウザでhttp://localhostへアクセスしてみるとGetting Started画面が表示された。成功してるっぽい。やったぜ!

Docker Desktopの起動と終了

ツールバーかタスクトレイにクジラがいますので、それをクリックするとQuit Docker desktop があります。クリックするとクジラが消えます。起動する場合は、デスクトップに追加された「Docker Desktop」のアイコンをダブルクリックすれば起動されます。

気になったこと

以下のコマンドでファイアウォールで受信の許可をしていないポート番号を指定して、同じネットワーク内の別の端末からcurlをしたところ、レスポンス返ってきた。

docker run -d --rm -p 55554:80 httpd

# 別端末から
$ curl http://<自端末(ホストOSのWindows)IP>:55554
<html><body><h1>It works!</h1></body></html>

docker inspectでコンテナに割り振られたIPを叩いてもレスポンスはないし…外で使うのは怖いな…。

別件だけど、既に入ってたputtyjpが動かない…。きっとバージョンアップの影響だな…困ったな…また調べるか…。

まとめ

Windows Updateには時間がかかりますが、その他はそんなに時間かからないですし良い感じですね!他の動作確認としてとりあえずhttpdのimageをpullしてrunしたら起動しました。良い感じですね~。

Docker Desktopの設定を見るとEnable KubernatesっていうチェックボックスがあるからK8S使うのも簡単なのかな。

これでWindows10 HomeでもDockerが普通に使えるようになりました。開発が捗るぞー


手動で2004にバージョンアップ

こちらを参考にさせていただいて、
Windows 10 2004 May 2020 Update のダウンロードと手動アップデート | パソブル
こちらから「今すぐアップデート」ボタンを押下して、exeをダウンロードしました。
Windows 10 のダウンロード

ダウンロードしたexeを実行するとダイアログが立ち上がります。そのまま画面に従ってください。

今すぐ更新ボタンを押下。
その後CPUのチェックなどが入り、インストールが始まりました。

私は
VMware PlayerがWindows 10 と互換性がないため、今すぐアンインストールしてください。
と言われ、画面にアンインストールボタンが用意されていたのそのままクリックしてアンインストールしました。
すぐ再起動するかときかれて、再起動。
再起動後、自動的に2004のアップデートが始まらなかったので、ダウンロードしたexeを改めて実行しました。

結構時間かかります。Youtubeでも観ながらお待ちください。私の場合は約40分かかりました。

この手順が終了したら、WSL 2 を既定のバージョンとして設定する から開始してください。

シェアする

  • このエントリーをはてなブックマークに追加

フォローする