WSL2+Laravelsail+Docker for Windows home ~Ubuntu不具合を越えて~
2022/03/11
お疲れ様です。
2020年7月入社、
プログラミンググループの酒井進吾(さかいしんご)です。
文章力のない私ですがこの度 、EBAブログ執筆者に選ばれてしまいました。いや、選んでいただきました!(; ・`д・´)
懸命に書いていくので温かい目と寛大な心で読んでいただけたら幸いです。
では、早速ですが本題にまいりますっ!!
今回のテーマは…
「Windows homeでのWSL2+Laravelsail+Dockerを使用した環境構築」
です!

現在、チーム内でリーダーの十川さんと山口さんとで共同開発としてLaravel-sailを使用して旅行会社JTBのフィッシングサイト(仮)を開発中なのですが、
結果としてローカル開発環境を再構築しないといけない状況になり、タイムリーなUbuntuの不具合によってかなり詰んでいたのでそこらへんの解決策も兼ねて書いていきたいと思います。
そもそもMacOSを使用の方はコマンド2撃で環境構築!!となっているようですが、残念ながらWindows home使用者はそう簡単にはいきません。
まずはWSL2が使用できるように事前設定をしていきましょう!
環境構築手順
0.事前準備
0-1.Linux 用 Windows サブシステムを有効にする
0-2.WSL 2 に更新するには、Windows 10 をアップデート
0-3.仮想マシンの機能を有効にする
0-4.Linux カーネル更新プログラム パッケージをダウンロードする
0-5.WSL 2 を既定のバージョンとして設定する
参考URL https://docs.microsoft.com/ja-jp/windows/wsl/install-manual
ここからが本番ですがDocker desktopを使用してGUIで管理したいよって方は2-3~4-3まで飛ばして4-3の下に◎Docker Desktopを使用の方(Docker Desktop2.3.0.2のインストール)の項目があるので実施してみてください。
1.Linux ディストリビューションをインストール(Ubuntu20.04)
https://www.microsoft.com/ja-jp/p/ubuntu-2004/9n6svws3rx71?rtc=1#activetab=pivot:overviewtab
ユーザー設定とパスワード設定を行う
2.WSL2にDockerを載せる
2-1.Ubuntu 20.04 をアップデートする
sudo apt update
sudo apt upgrade -y
2-2.必要なパッケージをインストールする
sudo apt install curl -y
sudo apt install apt-transport-https -y
2-3.Docker Engine をインストールする
2-3-1.Docker 公式 GPG 鍵を追加
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
2-3-2.Docker 安定版のレポジトリを追加
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
2-3-3.レポジトリをアップデートし、Docker Engine をインストール
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io -y
2-3-4.docker-compose もインストール
sudo apt install docker-compose -y
2-3-5.Docker デーモンを起動
sudo service docker start
3.Git clone
3-1.Git cloneを任意のディレクトリで実施した後、.envファイルの作成
cp .env.example .env
4.Dockerのコンテナを立ち上げる
4-1.dockerグループへユーザを追加
sudo gpasswd -a shingo5080486 docker
※ shingo5080486 は私のユーザー名なのでご自身のに変更してください
4-2.docker.sock にグループでの書き込み権限を付与。
sudo chgrp docker /var/run/docker.sock
4-3.docker daemonを再起動
sudo service docker restart
◎Docker Desktopを使用の方(Docker Desktop2.3.0.2のインストール)
https://www.docker.com/products/docker-desktop
1.settingのResources WSL Integrationのubuntuにチェックを入れ
5.phpをインストールする。
(公式リポジトリはバージョンが固定されています。OS標準のPHPには、それぞれバージョンがある)
//OS PHP
//Ubuntu 14.04 5.5
//Ubuntu 16.04 7.0
//Ubuntu 18.04 7.2
//Ubuntu 20.04 7.4

通常、Ubuntu 20.04 LTSで下記コマンドは動きません。
「sudo apt-get install php8.0」
5-1.別のリポジトリを利用する
sudo add-apt-repository ppa:ondrej/php
sudo apt-get update
sudo apt-get install php8.0
6.Sailを使ってDockerコンテナ上に一通りの開発環境を用意したいので、ローカルPCにComposerは入れたくない。
プロジェクト直下で、Composerのパッケージのインストール。
※すでに Ubuntu などにログインしていた場合、WSL Integration を有効にしてもパーミッションがはまっていなくて怒られるので入りなおす。
sudo docker run --rm \
-u "$(id -u):$(id -g)" \
-v $(pwd):/var/www/html \
-w /var/www/html \
laravelsail/php80-composer:latest \
composer install --ignore-platform-reqs
※laravelsail/php80-composer:latest \のphpXXをプロジェクトで使用するphpのバージョンを合わせないとエラーになる。
7.プロジェクトをビルド&バックグラウンドで起動
curl -s https://laravel.build/TravelSite | bash
cd TravelSite && ./vendor/bin/sail up -d
8.アプリケーションキーの初期化
php artisan key:generate
以上で基本的にはうまくいくと思いますが2022年3月10日時点ではUbuntuの不具合の所為でビルドしようとするとコケます!!
7を実施しようとすると…

工工工エエエエエエェェェェェェ(゚Д゚)ェェェェェェエエエエエエ工工工
なにやらphpの拡張機能のパッケージが足りないやらapt-utilsがインストールされていないため、パッケージ構成が遅れるやらapy-keyが非推奨だよの警告やらがでてきますが原因はそこではないです。
結果的に原因はUbuntuのバージョンの不具合のようです。
私は様々な検証をしましたが解決できなかったので十川さんに相談し、一つの記事を連携してくださいました。
↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓
DockerコンテナをLaravel sailコンテナを再ビルドしようとしたらビルドできなくなった - Qiita
投稿が3月6日なので最近ですね。
記事を書いた人の経緯を見てみると…

うん。ほぼ同じ。私も実はtinkerを使ってテーブルに文字列を入れる際にshellに日本語入力ができないところから始まっています。
でも私の場合はディレクトリ内弄り倒して、誤って共有ライブラリのシンボリックリンクを消してしまい、やむを得ず再構築することになってしまいました笑
Ubuntuのバージョンは下記以外のバージョンしても同じ状況に陥るので注意してください。
解決策 Ubuntu 21.10に変更
/docker/8.0/Dockerfile にあるDockerfileを編集してください。
vi Dockerfile

私のファイルはもう書き換わっていますが、
×FROM ubuntu:21.04
◯FROM ubuntu:21.10
×&& echo "deb http://ppa.launchpad.net/ondrej/php/ubuntu hirsute main" > /etc/apt/sources.list.d/ppa_ondrej_php.list \
◯&& echo "deb http://ppa.launchpad.net/ondrej/php/ubuntu impish main" > /etc/apt/sources.list.d/ppa_ondrej_php.list \
上記の2か所を書き換えて保存すればOKです!
そしてビルド!
Docker Desktopを使用の方は権限なくておこられるかも。なので下のコマンド
docker container exec -it travelsite-laravel.test-1 bash
※ travelsite-laravel.test-1 の部分は自分のコンテナNAMESに変更してください。
sudo chown shingo5080486 storage/ -R
※ shingo5080486は自分のにしてください
以上!