先日あったmicrosoft dev insiderでも周知がありましたが、
WSL2(Windows Subsystem for Linux)
がもう利用可能ということで早速
WSLからWSL2へ切り替えてみましたよ。
WSL2
ではもろもろ挙動が改善されている他に、何と言ってもDockerが利用できるようになる
のが
おいしいところ。
ソフトウェアの充実っぷりはどうしてもMacよりWinに軍配があると思ってるし開発も WindowsローカルでMac(Linux環境)と謙遜なく使えるようなら今後私のMacはお蔵入りかも。
ということで今後の開発環境どうするかの検討含め確認してみるのです。
はじめに
さて、私がプログラミングを大学から少しずつ始めて早10年くらい?
開発環境はおおよそ以下の感じで変遷してきた気がします。
↓ | desc |
---|---|
大学時代初め | WindowsPC localにあれこれコンパイラインストール開発 |
大学時代中盤 | VPS(Centos)を契約してWebサイトを立ち上げる。開発もVPS上で行う |
大学時代終盤 | WindowsPCにFedoraをdualbootさせてそこで開発 |
社会人初め頃 | WindowsPCにVM(VirtualBox)でCentos入れて開発 |
社会人中盤 | 資金ぶりがようやく落ち着きMacを買う。Mac localで開発 |
Now | Macで開発用Containerイメージpull、そこで開発. IDEが使いたいときはVSCode RemoteでMacからContainer or VPSへ接続して開発 |
Now(お仕事中) | 様々な制約のためWindows localで開発、たまにVMベタ |
時と場合によって異なりますが、
- local汚したくないからVPS(レンタルサーバ)へ
- VPSも汚したくないしRemoteはもっさりするからやっぱlocal
- local汚したくないし開発環境によって挙動(再現性)が変わるからContainer内で
て感じに変遷、privateでの開発はcontainerで行うようになってきています。
あと最近だとAWSのCloud9(クラウド環境)
でコードをいじる機会も少しずつ増えてきてます。
(お仕事での開発は割り切ってlocal, VMベタで汚しまくってるけど..)
ということで基本開発はMacを利用している状態なのですが、普段使いのPCとしてはソフトウェアの対応関係からどうしてもWindows環境は欠かせないわけです。
もしWindows localでLinux環境使えてそこでContainerも動くとなるとWindowsマシンのみで開発から普段使いまで事足りるね、ということでWSL2を試してみます。
WSL2に切り替える
環境
切り替えを行う前に、今回でのPCの環境をもろもろ洗っておきます。
- Windows環境
- Windows10 Home edition
- バージョン1903 (OS build 18932.1000)
- 既存Docker構成 : DockerToolbox (VirtualBox)利用
- 既存k8s構成 : minikube利用
- 既存WSL環境
- Ubuntu 18.04.2 LTS
切り替えはめちゃめちゃ簡単。以下公式ドキュメントに従うだけでいけました。
事前準備だけちょっと注意。
ビルドバージョンがWindows 10 build 18917
以上である必要がある
この記事執筆時点ではまだデフォルトでアップデートが降ってこないのでWindows Insider Program
で設定をファスト
以上にする必要がありました。
wslコマンドをつかっていじる
基本的にWSLに関する設定はPowershell上でwsl
コマンドを用いて行います。
# 管理者モードで以下実行してVM機能を有効にする(実行後再起動)
> Enable-WindowsOptionalFeature -Online -FeatureName VirtualMachinePlatform
# 再起動後、powershellを再度起動しwsl2に切り替える(以降は管理者モードでなくてよい)
## 切り替える対象のディストリビューションを確認
> wsl -l
Windows Subsystem for Linux ディストリビューション:
Ubuntu (既定)
## Ubuntuを切り替える (2を1にすればすぐ切り戻しも可能)
> wsl --set-version Ubuntu 2
## defaultでwsl2にしたい場合は以下指定
> wsl --set-default-version 2
## 切り替わったか確認
> wsl -l -v
NAME STATE VERSION
* Ubuntu Running 2
## そのままwsl2の環境にログイン
> wsl
Agent pid 1705
kon@nicopun:/mnt/c/Users/test$ cat /etc/os-release
NAME="Ubuntu"
VERSION="18.04.2 LTS (Bionic Beaver)"
...
WSL1と比較して、起動が早くなってもっさり感もなくなっているのが体感でもわかりました。 すげー。。
Dockerを試す
docker自体のインストール方法は公式通りで問題ないです。
起動時だけちょっとあれってなった
# systemctlだと起動できない。。。
$ sudo systemctl status docker
System has not been booted with systemd as init system (PID 1). Can't operate.
# serviceで起動するとうまくいった
$ sudo service docker start
* Starting Docker: docker [ OK ]
$ sudo service docker status
* Docker is running
# 適当にコンテナ実行
$ sudo docker run --rm hello-world
[sudo] password for test:
Hello from Docker!
...
問題なし!
WSL1とのメリデメ
WSL2はWSL1と比較していいこと尽くめ、というわけでもなさそうです。詳細は以下を参照。
https://docs.microsoft.com/en-us/windows/wsl/wsl2-ux-changes
ざっくりまとめると
- Linux root filesystem内でのファイルアクセスは高速化, だけどWinとのファイルアクセスは低速化
- WinからWSL2へのネットワークアクセスは
localhost
でなくIP指定しろ(WSL2からWinも同様) 1 - ストレージはext4 file systemのVHDを採用。256GBを超える場合は拡張する必要あり
特にlocalhostでアクセスできないのはちょっと使い勝手が微妙。一応以下のような記述がみられるので今後修正されるらしいけども。1
This is something that is temporary, and very high on our priority list to fix.
あとはWindowsのExplorer
からLinux
にアクセスできるようになったのはすごいところ。
# linux環境からexplorer起動
$ explorer.exe .
痛いのはWindows上でVM(VirtualBox)が使えなくなってしまうところ。
特にWindows10 Home edition
だとHyper-V非対応
だからDockerToolbox
を使うことになると思うけど
DockerToolbox
はVirtualBoxに依存してるからWindows自体でDockerが起動できなくなってしまうという事態に。。
試しにDockerを起動してみるとやっぱりエラーになるですね。
$ docker-machine.exe start
Starting "default"...
(default) Check network to re-create if needed...
(default) Windows might ask for the permission to create a network adapter. Sometimes, such confirmation window is minimized in the taskbar.
(default) Found a new host-only adapter: "VirtualBox Host-Only Ethernet Adapter #7"
(default) Windows might ask for the permission to configure a network adapter. Sometimes, such confirmation window is minimized in the taskbar.
(default) Windows might ask for the permission to configure a dhcp server. Sometimes, such confirmation window is minimized in the taskbar.
Unable to start the VM: C:\Program Files\Oracle\VirtualBox\VBoxManage.exe startvm default --type headless failed:
VBoxManage.exe: error: Raw-mode is unavailable courtesy of Hyper-V. (VERR_SUPDRV_NO_RAW_MODE_HYPER_V_ROOT)
VBoxManage.exe: error: Details: code E_FAIL (0x80004005), component ConsoleWrap, interface IConsole
Details: 00:00:03.250427 Power up failed (vrc=VERR_SUPDRV_NO_RAW_MODE_HYPER_V_ROOT, rc=E_FAIL (0X80004005))
と悲観しかけたが、Docker Desktop
がまもなくWSL2対応するらしい。
これでこれまでHyper-V対応のWindows10 Pro
でないと利用できなかったDocker Desktop
がWindows10 Home
でも起動できるようです。
よかた、もう少し待ってみよう。
(Pro
の恩恵が目減りするような気もするけど。)
==========2019/08/01追記============
その後、7/31にWSL2対応のDocker Desktopがリリースされました。 詳細は以下を参照のこと。
- https://blog.docker.com/2019/07/5-things-docker-desktop-wsl2-tech-preview/
- https://docs.docker.com/docker-for-windows/wsl-tech-preview/
がしかし早速試してみたところ、以下のエラー。。。
Docker Desktop requires Windows 10 Pro or Enterprise version 15063 to run.
issueにも同様の報告が上がっています。これは残念ながらもうちょい待ちですね。2
https://github.com/docker/for-win/issues/4378
おわりに
今回WSL2への移行を行い、問題なくlinux上でのContainer環境が手に入りました。 また、それ以上にWSL1の時にあったもっさり感がなくなり、普通にLinux Local環境を触っている感覚なのはすごい。
もう少し使ってみて問題なさそうならMacから開発環境を乗り換えようと思います。
また、最近ではAWSのCloud9
もかなり使いやすく、VisualStudio
もブラウザ版リリース予定とのことで、
オンラインならPCのスペック依存から解放されるので今後開発環境はクラウドもガンガン使っていく気がします。
結局開発環境は今後もあれこれ変遷していきそう。。
-
Windows 10 Insider Preview Build 18945
より早速修正されました!詳細は公式ブログを参照。 ↩︎ -
2020-03-02、
Docker Desktop Community 2.2.2.0
にて 正式にWindows10 HomeでのDocker Desktopサポートがリリースされました 🎉 ↩︎