この記事はニフティグループ 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の利用を開始します。
要約すると以下のような感じです。
- Microsoftの公式ページから自身のMicrosoftアカウントをInsiderとして登録。
- 管理者権限のあるユーザーで、
スタート
>設定
>更新とセキュリティ
>Windows Insider Program
から開始する
をクリック。 -
アカウントを選んで開始
からWindows Insider Programに登録したMicrosoftアカウントを入力。 - 受信したいコンテンツの種類と受信頻度を適切に選択し、PCを再起動。
WSL2を使うための要件では受信頻度を"ファスト"にせよという指示がありますが、11/17時点では"スロー"でも必要なビルドを受信することができました。
"ファスト"はややリスクが大きいですので、"スロー"を選択することを推奨します。
また、私の環境の場合、ビルドの受信とインストールには数時間かかりました。
マシンスペックとネットワークの状況によりけりかとは思いますが、時間の余裕のある時に行いましょう。
スタート
>設定
>システム
>バージョン情報
にあるWindowsの仕様
の項目から、インストール済みのビルドを確認できます。
ビルドが18917以降になっていれば準備完了です。
###WLS1を有効化する
WSL2はWSL1をアップグレードすることで使えるようになります。
なので、あらかじめWSL1を使える状態にしておきます。
-
スタート
>設定
>アプリ
>アプリと機能
の関連項目
からプログラムと機能
をクリック。 - 左の一覧から
Windowsの機能の有効化または無効化
をクリック。 - 以下の3つを有効化して再起動します。
- Linux用Windowsサブシステム
- Windowsハイパーバイザー プラットフォーム
- 仮想マシンプラットフォーム
-
Microsoft Store
を開き、検索窓でUbuntu 18.04 LTS
と検索し、入手
をクリック。インストールを完了します。 - スタートメニューから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-V
やDocker for Windows
でDockerを動かすことができるようなので、要件に合わせて使い分けたいですね。
##参考
- Windows10 HomeでLinuxに寄せた開発環境を整える
- Windows 10でLinuxを使う!正式機能になったWSLの導入方法
- Windows10にWSLで作った環境にdockerをインストールするまで
- WSLで「普通」にDockerが動くようになっていた話(しかしdocker-composeは動かない)
- Linuxがほぼそのまま動くようになった「WSL2」のネットワーク機能
明日は@iNakamuraくんが自然言語処理について書いてくれるようです。お楽しみに!