Windows 10 HomeのWSL2でdocker-composeを使う


この記事はニフティグループ Advent Calendar 2019の10日目の記事です。


入社1年目研修の一環としてLaravelフレームワークを使ってのチーム開発を行いました。
せっかくならば家でもLaravelで開発を行おうと思い、研修時にも使ったLaradockを用いて環境構築を行おうと考えました。

ところがちょっと待てよ、自分のPCはWindowsじゃないか。
Dockerを動かすのがかなり面倒だと聞いたぞ。
VM立てたりしなきゃいけないのか…?

やる気を削がれつつ調べてみると、WSL2を用いてDocker(docker-compose)が使えるようだったので、そちらを採用して環境構築を進めていきました。

環境

  • Windows 10 Home
    • バージョン 1903
    • OSビルド 18362.418

WSL2の導入

WSL2は2019/12/08現在は正式リリースされておらず、2020年の春に正式リリースされるのではと噂されていたりしますされました!(バージョン2004)
現段階でWSL2を使うためには、OSビルドの先行リリースをプレビューできるWindows Insider Programに登録し、β版として使う必要があります。

Windows Insider Programの利用を開始する

WSL2を使うための要件を一読し、公式サイトにしたがってWindows Insider Programの利用を開始します。
要約すると以下のような感じです。

  1. Microsoftの公式ページから自身のMicrosoftアカウントをInsiderとして登録。
  2. 管理者権限のあるユーザーで、スタート>設定>更新とセキュリティ>Windows Insider Programから開始するをクリック。
  3. アカウントを選んで開始からWindows Insider Programに登録したMicrosoftアカウントを入力。
  4. 受信したいコンテンツの種類と受信頻度を適切に選択し、PCを再起動。

WSL2を使うための要件では受信頻度を"ファスト"にせよという指示がありますが、11/17時点では"スロー"でも必要なビルドを受信することができました。
"ファスト"はややリスクが大きいですので、"スロー"を選択することを推奨します。

また、私の環境の場合、ビルドの受信とインストールには数時間かかりました。
マシンスペックとネットワークの状況によりけりかとは思いますが、時間の余裕のある時に行いましょう。

スタート>設定>システム>バージョン情報にあるWindowsの仕様の項目から、インストール済みのビルドを確認できます。

ビルドが18917以降になっていれば準備完了です。

WLS1を有効化する

WSL2はWSL1をアップグレードすることで使えるようになります。
なので、あらかじめWSL1を使える状態にしておきます。

  1. スタート>設定>アプリ>アプリと機能関連項目からプログラムと機能をクリック。
  2. 左の一覧からWindowsの機能の有効化または無効化をクリック。
  3. 以下の3つを有効化して再起動します。
    • Linux用Windowsサブシステム
    • Windowsハイパーバイザー プラットフォーム
    • 仮想マシンプラットフォーム
  4. Microsoft Storeを開き、検索窓でUbuntu 18.04 LTSと検索し、入手をクリック。インストールを完了します。
  5. スタートメニューからUbuntuを起動し、ユーザー名とパスワードを設定します。
Installing, this may take a few minutes...
Installation successful!
Please create a default UNIX user account. The username does not need to match your Windows username.
For more information visit: https://aka.ms/wslusers
Enter new UNIX username: ←ユーザー名を入力
Enter new UNIX password: ←パスワードを入力

WSL2へアップグレード

公式サイトの手順に従いWSL2を導入します。
コンポーネントの有効化はGUIからすでに行ったのでスキップします。

PowerShellを管理者権限で実行し、以下のコマンドを叩きます。

wsl --set-version Ubuntu-18.04 2

バージョン確認を行い、VERSIONが2となっていればWSL2の導入は完了です。

wsl -l -v

Dockerの導入

WLS2で動くようになったLinux環境にDockerを導入していきます。
基本的にはDockerの公式の案内に従います。

Dockerをインストールする

公式サイトで案内されているインストール方法のうち、今回は簡単そうな"Install using the convenience script"を試してみます。
正式なプロダクトへの使用は推奨されていないらしいので自己責任でお願いいたします。

WindowsのスタートメニューからUbuntuを開き、以下のコマンドを叩きます。

$ curl -fsSL https://get.docker.com -o get-docker.sh
$ sudo sh get-docker.sh
$ sudo usermod -aG docker your-user

これだけで完了です。
念のためバージョンをチェックします。

$ docker -v

docker-composeをインストールする

[公式サイト]のLinux用の案内に従い、以下のコマンドを叩きます。

$ sudo curl -L "https://github.com/docker/compose/releases/download/1.25.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
$ sudo chmod +x /usr/local/bin/docker-compose

以上です。
バージョンチェックもしてみます。

$ docker-compose --version

WSL1ではここまで完了したとしても、いざdocker-composeでコンテナを起動しようとするとコケてしまうようでした。
それはWSL1はネットワークまわりが不完全だったかららしいですが、WSL2ではそれが改善されているようです。

おまけ:Laravel環境の導入

せっかくなのでdocker-composeでLaraDockを立ち上げてみます。
こちらはメイントピックから外れるので詳細は記しません。
以下の記事を参考にインストールを行いました。

デーモンとコンテナを起動すると、無事にlocalhostからウェルカムページを見ることができました。
docker-composeもlocalhostもきちんと生きていますね!

$ sudo /etc/init.d/docker start
$ docker-compose up -d workspace nginx mysql

まとめ

VMを立てることなくWindows 10 HomeのWSL2でLinuxを動かしdocker-composeを使うことができました。

WSL2を使うにはWindows Insider Programへの参加が必要でしたが、今回用いたWSL2以外にもWindows 10 Pro + Hyper-VDocker for WindowsでDockerを動かすことができるようなので、要件に合わせて使い分けたいですね。

参考


明日は@iNakamuraくんが自然言語処理について書いてくれるようです。お楽しみに!