今回は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キー
押して歯車ボタン
押してから更新とセキュリティ
を選択してください。
サイドバーの一番下Windows Incider Program
を選択してInciderの設定をファストに変更します。インストールまで結構時間がかかりますので
寝る前にやることを勧めます。
Windowsの機能の有効化
次はWindowsの機能の有効化または無効化
からHyper-V
及び、Windows Subsystem for Linux
を有効化します。
Ubuntuのインストール
機能の有効化が終わったらUbuntuをインストールしましょう。
Linuxを動かすコンソール見たいな感じですね!
Dockerの公式ページで18.04を例に出していたのでおそらく推奨バージョンでしょう。
Microsoft Store経由でなくても構いません、インストールして起動したらしばらく黒い画面で待たされます。インストールが済むとユーザー名とパスワードを設定して(好きなものを設定していただいて構いません、パスワードは忘れないように)、WSL1は利用可能になります。
WSL2のインストール
公式のWSL2サイト
次が肝心のWSL2のインストールです。
まずはWindows Powershell
を管理者権限で実行してください。
Enable-WindowsOptionalFeature -Online -FeatureName VirtualMachinePlatform
上記コマンドを入力して必要であれば再起動を行います。
(私の環境ではすでにインストール済みなのでRestart Needed: False
になってます)
その次にwsl -l
を入力してWSL1を利用しているディストリビューションを確認します。
先ほどインストールしたUbuntuの18.04ですね。
それを確認したのちにWSL2への変換を行います。
wsl --set-version Ubuntu-18.04 2
を入力してください。
ここまででWSL2のインストールは完了です。
試しにwsl -l -v
と打って下さい。
Version2になっているのが確認できるはずです。
Docker wsl2 tech preview
最後にDockerをインストールしましょう。
すでにインストールしている方は一旦アンインストールしてください。
(UpdateからだとうまくWSL2が反映されていませんでした。)
WSL2 tech preview版を公式からダウンロードして普通にインストールするだけです。
Docker公式サイト
DockerのメニューにWSL2 tech previewが追加されているのでそこから
このWindowが開けます。StartしたらWSL2でDockerを利用する準備が整いました!
試しに動かしてみる
Dockerのおいてあるプロジェクト内へ移動しましょう。
(見られて困るものでもありませんが、なんとなく気持ち悪かったので色々スクショの情報伏せています、なんかうねうねしてて逆に気持ち悪いですね笑)
そういえばWindows Gitbashをインストールしとくと便利です!
Git bash
docker context ls
と入力するとdefaultとwslが存在していることが確認できます。
WSLに入ってからdocker-compose
出来なくもないんですが、
肝心のここがうまく動作しないポイントが多くいま調査中です。。。
本当は完全にLinux環境下に色々立ち上げてデフォルトのWindows内は汚したくないのですが、まだ色々調査中です。
特に買ったPCにすぐ愛しのNorton入れたのにNortonによってwsl2のネット接続阻害されたりと、まだ周辺環境に関してもリリース待ち状況です。
Nortonの話
ってことで通常のCMDからdocker-compose up -d
しています。
この状態だとdocker context wsl
上ではコンテナが立ち上がらないので、
docker context use default
でdefaultに切り替えて使っています。
意味ないじゃんって思われるかもしれませんがDocker立ち上げそのものが安定していなかったのですが、docker context use wsl
の状態から立ち上げるとWSL2のエンジンを利用しているのか安定して立ち上げ完了します。
まだ、真価を出せていませんがまずはこれだけでも十分に価値があるのでこういった利用方法をしています。
もう少し細かい仕様を理解できれば追記するか新しく執筆したいと思います。
今後やりたいこと
冒頭でも触れましたが目下情報を集めている最中です。
本来はWSL上の領域でDockerのコンテナを立ち上げてさらにそのコンテナ内でPHPやComposerを動かせるようにしたいのですが、例えばmysqlへの接続権限拒否されたりと本来確認していなかったエラーをWSL2上ではチラホラと見ています。
そういった注意点及び解決策のまとめが出来次第、本記事の続きを執筆していきたいです。