WindowsのInsider Previewで、Release PreviewにもWSL2に対応したWindows10 2004 May 2020 Updateが降ってきたので、どんなもんかとWSL2を試してみました。
ついでに、UbuntuよりCentOSの方が使い慣れてるので、CentOS環境も作れないかDockerで検証してみました。
WSL2を入れる
ぐぐればたくさん記事が出てきますので省略しますが、公式ドキュメントとしては下記になります。
https://docs.microsoft.com/ja-jp/windows/wsl/wsl2-install
ざっくり書けば、
- Hyper-Vを有効化する
- Microsoft StoreからUbuntuをインストールする
- この状態では古いWSL1なので、”wsl –set-version Ubuntu 2”を叩いてWSL2に変換する
カーネルが古いとかなんとか言われたら、
https://docs.microsoft.com/ja-jp/windows/wsl/wsl2-kernel
からアップデートすると良いです。
Dockerを入れる
インストールも公式の手順で問題無いです。
http://docs.docker.jp/engine/installation/linux/docker-ce/ubuntu.html
見るの面倒ですって方は、下を叩けばOK。
sudo apt-get update
sudo apt-get install -y \
apt-transport-https \
ca-certificates \
curl \
software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable"
sudo apt-get install -y docker-ce docker-compose
service docker start
CentOS7を入れる
カーネルが新しいならまあディストリビューション違ってても大丈夫だろうという精神で入れてみる。
sudo docker image pull centos:centos7
sudo docker run -d -p 10080:80 --privileged --name centos7 centos:centos7 /sbin/init
sudo docker exec -it centos7 bash
動きました。後でApacheで外部からアクセスするので、80ポートを外部ポート10080から叩けるように-pオプションがついています。
もし、
docker: Error response from daemon: cgroups: cannot find cgroup mount destination: unknown.
とか出る場合は、
sudo mkdir /sys/fs/cgroup/systemd
sudo mount -t cgroup -o none,name=systemd cgroup /sys/fs/cgroup/systemd
sudo docker rm centos7
と叩いて再度トライ!
手っ取り早くLAMP環境を作成してみる。phpアプリとしてphpMyAdminで動作確認します。
timedatectl set-timezone Asia/Tokyo
yum install -y epel-release
yum install -y httpd mariadb-server mariadb php phpmyadmin
systemctl start httpd
systemctl start mariadb
systemctl enble httpd
systemctl enable mariadb
mysql_secure_installation
ここで何か聞かれますが、1回エンター、rootのパスワード2回、あとエンター連打でOKです。
ここでブラウザから、
http://localhost:10080/phpmyadmin
にアクセス。Forbbidenになると思います。
アクセスログを確認します。
$ tail /var/log/httpd/access_log
中略
172.17.0.1 - - [21/Apr/2020:09:22:13 +0000] "GET /phpmyadmin HTTP/1.1" 403 212 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:75.0) Gecko/20100101 Firefox/75.0"
yumからインストールしたphpMyAdminは初期値ではlocalhostからしかアクセスを受け付けません。ここでは172.17.0.1からのアクセスが弾かれているので、このIPアドレスを許可します。
vi /etc/httpd/conf.d/phpMyAdmin.conf
最初に出てくる
<RequireAny>
Require ip 127.0.0.1
Require ip ::1
</RequireAny>
の部分を
<RequireAny>
Require ip 127.0.0.1
Require ip ::1
Require ip 172.17.0.1
</RequireAny>
とします。そしたらhttpdを再起動。
systemctl restart httpd
改めて
http://localhost:10080/phpmyadmin/
にアクセスするとログイン画面が出ますので、設定したrootパスワードで入れればOK!
ヤッター!
作業していたコンソール画面は閉じてしまっても、裏でちゃんとhttpdとか動いてくれています。
VirtualBoxとか使わなくてもDockerが使えて、しかもCentOS環境も動く。
メモリとかCPUの割り当てとか意識せずにほぼネイティブといっても良いLinux環境が使えるので、WSL2スバラシス!
もしこのままLAMP開発環境として使うのであれば、Dockerの機能でコンテナ内のディレクトリをWSL2内のディレクトリにマッピングするなり、コンテナ内でsshdを起動しておいて22ポートを外部から叩けるようにして、ソースコードをSCP転送とかで送り込むとかすれば良いと思います。