Help us understand the problem. What is going on with this article?

Windowsで最高のWeb開発環境を作りたい話(Docker + WSL2)

今回はWSL2+Dockerの環境でWindowsで最高の開発環境を作りたいという話になります。
環境開発って一番ストレスが溜まりますよね、
Docker弄ってエラーと睨めっこしてたら三連休が亡くなりました( ;∀;)
噂のWSL2、まだ理解不足な部分も多く、本記事はDocker WSL2 tech preview立ち上げるとこまでのメモ程度になります。
WSL2がまだ正式リリースではないようで情報量が足りてない印象があります。
(情報目下集めているとこなので随時更新していきたい気持ち)

社内でも在宅導入のテストが始まったし自宅のWindowsで開発したい方いるんじゃないかなぁ
私はまずnginx+php+composer+node+mysqlなどを完全にDocker環境に依存させてWSL2とDockerが動けば開発環境が出来上がるように設定していますが、WSL2に関してもっと理解が進んでからそちらに関しての記事は執筆したいです。
↑多分ここが一番みなさん知りたいとこですよね、すみません。。。

きっかけ

本題に入る前にWindowsを使う理由と、
WSL2でDockerを利用することにどのようなメリットがあるのかを説明します。

Windowsの理由

まず、Windowsの理由は単純にweb開発するだけならよかったのですが私は機械学習などガツガツ動かしたかったので現状最適解になりそうなNvidiaのグラボを積んでいるノートパソコンを買いました。
海外のおすすめラップトップ記事見るとまぁmacも一位だったり上位には食い込んでたりするけど、、、macって...遅いじゃん(@´ -`)
その関係でWindowsでの開発環境を作成する必要に迫られた次第です。
(macもwindowsも両方買えば良いとか言わないで笑<-二台持ちとかノート買ってる意味ない)
(あと外付けでNvidiaのグラボつけろとかもダメです<-それもうデスクトップ)
個人的な理由になってしまいましたが、macのコスパの悪さからwindowsに切り替えるユーザーも増えてきており最近リリースされたWSL2もその後押しとなっています。

私は詳しくないんですがゲームもエンジニアリングもどっちもしたいって方の選択肢らしい?

WSLを使う理由

では、WSL2のメリットは?
WSLはWindows Subsystem for Linuxの略称です。
言葉のまんまLinuxを動作させるシステムですね、
2になったことで初期バージョンでは不安定だったLinuxから安定動作するようになりました。
おかげで不安定だったDocker for windowsをLinuxエンジンで動かせるようになり昨今注目されています。
まだ、macに比べて多少の不便さは残りますがまだベータリリースのようですし正式リリースするころにはmacの環境と遜色なく開発できるようになるでしょう。(願望です)

環境構築スタート

Windowsを最新バージョンへ

前置きも長くなりましたが環境構築を始めましょう。
まずはWindowsのバージョンを最新のものに引き上げなければいけません。
最新といっても一般コンシューマー向けのバージョンより更に先のものです。
Winキー押して歯車ボタン押してから更新とセキュリティを選択してください。
incider_LI.jpg
サイドバーの一番下Windows Incider Programを選択してInciderの設定をファストに変更します。インストールまで結構時間がかかりますので
寝る前にやることを勧めます。

Windowsの機能の有効化

次はWindowsの機能の有効化または無効化からHyper-V及び、Windows Subsystem for Linuxを有効化します。
hyper-v_LI.jpg
wsl-on_LI.jpg

Ubuntuのインストール

機能の有効化が終わったらUbuntuをインストールしましょう。
Linuxを動かすコンソール見たいな感じですね!
Dockerの公式ページで18.04を例に出していたのでおそらく推奨バージョンでしょう。
Ubuntu.PNG
Microsoft Store経由でなくても構いません、インストールして起動したらしばらく黒い画面で待たされます。インストールが済むとユーザー名とパスワードを設定して(好きなものを設定していただいて構いません、パスワードは忘れないように)、WSL1は利用可能になります。

WSL2のインストール

公式のWSL2サイト
次が肝心のWSL2のインストールです。
まずはWindows Powershellを管理者権限で実行してください。
wsl-first.PNG
Enable-WindowsOptionalFeature -Online -FeatureName VirtualMachinePlatform
上記コマンドを入力して必要であれば再起動を行います。
(私の環境ではすでにインストール済みなのでRestart Needed: Falseになってます)
その次にwsl -lを入力してWSL1を利用しているディストリビューションを確認します。
wsl2-convert.PNG
先ほどインストールしたUbuntuの18.04ですね。
それを確認したのちにWSL2への変換を行います。
wsl --set-version Ubuntu-18.04 2を入力してください。
ここまででWSL2のインストールは完了です。

試しにwsl -l -vと打って下さい。
68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f3438393136302f65386161333130372d323230652d376635652d613530662d3062353466373631663532652e706e67.png
Version2になっているのが確認できるはずです。

Docker wsl2 tech preview

最後にDockerをインストールしましょう。
すでにインストールしている方は一旦アンインストールしてください。
(UpdateからだとうまくWSL2が反映されていませんでした。)
WSL2 tech preview版を公式からダウンロードして普通にインストールするだけです。
Docker公式サイト
dockerwsl2.PNG
DockerのメニューにWSL2 tech previewが追加されているのでそこから
このWindowが開けます。StartしたらWSL2でDockerを利用する準備が整いました!

試しに動かしてみる

Dockerのおいてあるプロジェクト内へ移動しましょう。
(見られて困るものでもありませんが、なんとなく気持ち悪かったので色々スクショの情報伏せています、なんかうねうねしてて逆に気持ち悪いですね笑)
そういえばWindows Gitbashをインストールしとくと便利です!
Git bash

dockercontextls_LI (2).jpg
docker context lsと入力するとdefaultとwslが存在していることが確認できます。
68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f3438393136302f62613031623933312d373130652d643864642d336136392d6664343730626333323162332e706e67.png
WSLに入ってからdocker-compose出来なくもないんですが、
肝心のここがうまく動作しないポイントが多くいま調査中です。。。
本当は完全にLinux環境下に色々立ち上げてデフォルトのWindows内は汚したくないのですが、まだ色々調査中です。
特に買ったPCにすぐ愛しのNorton入れたのにNortonによってwsl2のネット接続阻害されたりと、まだ周辺環境に関してもリリース待ち状況です。
Nortonの話

dockercontext-wslcontainer_LI.jpg
ってことで通常のCMDからdocker-compose up -dしています。
contextdefault_LI.jpg
この状態だとdocker context wsl上ではコンテナが立ち上がらないので、
docker context use defaultでdefaultに切り替えて使っています。
意味ないじゃんって思われるかもしれませんがDocker立ち上げそのものが安定していなかったのですが、docker context use wslの状態から立ち上げるとWSL2のエンジンを利用しているのか安定して立ち上げ完了します。
まだ、真価を出せていませんがまずはこれだけでも十分に価値があるのでこういった利用方法をしています。
もう少し細かい仕様を理解できれば追記するか新しく執筆したいと思います。

今後やりたいこと

冒頭でも触れましたが目下情報を集めている最中です。
本来はWSL上の領域でDockerのコンテナを立ち上げてさらにそのコンテナ内でPHPやComposerを動かせるようにしたいのですが、例えばmysqlへの接続権限拒否されたりと本来確認していなかったエラーをWSL2上ではチラホラと見ています。
そういった注意点及び解決策のまとめが出来次第、本記事の続きを執筆していきたいです。

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away