Docker Desktop for WSL2 を使い快適にWindowsでサーバ開発をしよう！

# はじめに
私は元々Microsoft関連の案件やWindowsゲーム、コンシュマーゲーム、カーネル開発などを行っていました
時々サーバ開発も行いました
TCP/IPを使って直接サーバをかく場合はVisualStudioでコードを書いたり、それをgcc対応したりしていましたが
時代がWebフレームワークによる軽量開発が多くなり、WindowsにそのたびにApacheや言語をインストールして開発
コマンドプロンプトが貧弱なのでCygwinを使って
開発環境ごとにHDDを作ってHDD交換しながら仕事をしていた時もありました
しかし、WindowsでWeb開発環境を完成させるのは少し疲れます。本番環境がLinuxの場合は予期せぬ問題がおこります

私は2011年にMacbookProを買い、それ以降はMacでサーバ開発を行っていました
MacOS XはNetBSDベースのLinuxに優しいOSで非常に開発がしやすくなりました
MacPortsで簡単に環境構築できるし、Chefで環境を簡単に構築できる

そしてVMの時代がきて、Dockerの時代です
その頃 MacbookProが調子悪くなりWindowsへの乗り換えを行いました
Dockerがあるので　Windowsでほぼ問題なくサーバ開発が出来ました！
ところが、パスの問題やシェルの問題などがあり、それを1つずつ対応していき
やっと問題なく開発できるようになりました

ここまでが過去の記事です
https://qiita.com/YukiMiyatake/items/73c7d6c4f2c9739ebe60

今回はWSL2を導入し、より快適にするつもりです

## WSL2とは
Windows Subsystem Linuxの後継者です
WSLでは、LinuxコマンドをエミュレーションしてWindowsで動かしていたため
一部のソフトウェアが動きませんでしたnmapやtcpdumpなど
その動かないソフトウェアの一つがDockerです
そのため、Windowsでサーバ開発するには、WindowsにDockerをインストールし、それを使う必要がありました

WSL2はエミュレーションではなく、Hyper-V上で完全なLinuxが動くので、すべてのソフトウェアが動きます
当然、Dockerも動きます
試してみましょう

# 導入
## WSL2のインストール
下記ドキュメントどおりにすればインストールできますが注意点が色々あります
https://docs.microsoft.com/ja-jp/windows/wsl/wsl2-install

まず、Hyper-V上に構築されるので、Windows10 Pro 64bit 以上が必要と思っていましたが
どうやらHomeエディションでもWSL2はインストールできるそうです
https://devblogs.microsoft.com/commandline/announcing-wsl-2/

Windows 10ビルド 18917以降
なので、現状は 評価版のWindowsが必要です
そして現在私はOSのシャットダウンがだいたい失敗するようになりましたｗ
![SnapCrab_NoName_2019-10-23_12-29-40_No-00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/13916/72ed342c-dcb5-777e-886b-6d25cb7951bf.png)

VirtualBoxなどHyper-Vと併用できないソフトウェアは使用できなくなる

そして、私は上記の手順でWSL2を導入しましたが、エラーでWSLが起動しなくなりました![SnapCrab_NoName_2019-10-23_12-29-6_No-00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/13916/0f08ca57-95f4-3dd8-cc9b-29aa9e9a3eb1.png)

ネットで色々な対処法がありました
OSのバージョンも3個ぐらいためしたけどダメで
私の場合は、Docker for Windowsをアンインストールで動くようになりました
そうですね、WSL2にDockerを入れるので Docker for Windowsは邪魔かもしれません

## Dockerのインストール
https://www.docker.com/blog/5-things-docker-desktop-wsl2-tech-preview/

今回は Docker for Windowsではなく、Docker Desktop for WSL2 を使います
まだプレビューですが、ディスクI/Oが高速になったり色々なメリットがあるそうです
また、WSL2上にLinuxのDockerもインストールできるはずですが、今回は使いません

WSL2の導入は終わっているのでDocker Desktop for WSL2を導入します
上記より

>>Finally, download the Tech Preview  Docker Desktop for WSL 2 Technical Preview

の部分をクリックすればダウンロードできます

そして注意点は、OSもDockerもPreview版なので不具合が多いです
私の場合はOSをシャットダウンしてもほぼ失敗して強制電源OFFしていますし
DockerもCheck Updateするとなぜかディスク容量がたりないと言われ、Dockerがアンインストールされておわります

念のため、WSL2のDockerを消しておきます。

```:bash
$ apt remove docker-ce
$ apt remove docker-ce-cli
$ apt remove docker-engine
$ apt remove docker-engine-cs
$ apt remove docker.io
```

また、 DOCKER_HOST を設定している場合は、その環境変数を削除しておきます

Dockerを起動し、メニューより WSL 2 Teck Previewを開く

![SnapCrab_Settings_2019-10-23_15-33-38_No-00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/13916/4000fc9a-913b-bf3e-cb65-0743a791bc5a.png)

StatusからDockerをStartさせると、WSL2から Dockerコマンドが使えるようになります！

いつものように docker run hello-world で確かめてみます

![SnapCrab_選択yuki@DESKTOP-NF7SQ0F cWINDOWSsystem32_2019-10-23_15-37-19_No-00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/13916/adc0c244-b0f6-6e43-ed62-420bb53639e3.png)

動きましたね！
一通り仕事やOSSで使っていたdocker-composeも動きました
問題なさそうですね！

この後 無茶苦茶仕事した。