【Laravel/Docker/Windows10】Docker上にLaravel環境を構築する

Windows10にLaravel 8.x/Dockerの環境を作成するにあたっての備忘録です。
Laravel 8.x 公式ドキュメントのインストール手順には、
Docker上にLaravel環境を構築する方法が紹介されています。
その手順に従い、Windows10にLaravel環境を作成するにあたっての備忘録。

## Docker Desktopをインストール
ダイアログに従って普通にインストール。
Docker Desktop
https://www.docker.com/products/docker-desktop

## Windows Subsystem for Linux 2（WSL2）インストール
以下URLの「Manual Installation Steps」を参考に。
https://docs.microsoft.com/en-us/windows/wsl/install-win10

#### PowerShellを管理者権限で起動
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/147857/c5431477-5209-254e-3416-d7ac693dcb66.png)

#### Windows SubsystemforLinuxオプション機能の有効化
WindowsでLinuxサブシステムを使えるようにするための設定。
PowerShell上で次のコマンドを実行し、マシンを再起動する。

```
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
```
#### 仮想マシン機能の有効化
仮想マシン利用を有効にするための設定。
PowerShellで次のコマンドを実行し、マシンを再起動。

```
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
```

#### WSL2 Linuxカーネルアップデートパッケージをダウンロード
リンク先の「WSL2 Linux kernel update package for x64 machines」から
ダウンロードしてインストール。
https://docs.microsoft.com/en-us/windows/wsl/install-win10

#### WSL2をデフォルトバージョンとして設定
これからインストールするLinuxサブシステムで、WSL2をデフォルトとして使用するための設定。
PowerShell上で次のコマンドを実行。
```
wsl --set-default-version 2 
```
## Linuxサブシステムのインストールと設定

#### サブシステムのインストール

Windows上で動作するLinuxサブシステムをインストールする。
色々あるが、今回は深く考えずにKali-linuxをインストールした。

[MicrosoftStore](https://aka.ms/wslstore)から、
各Linuxサブシステムをダウンロード＆インストール。
各サブシステムへのリンクは下記リンクの「Step 6 - Install your Linux distribution of choice」参照。
https://docs.microsoft.com/en-us/windows/wsl/install-win10

#### サブシステムのユーザー、パスワードを設定
サブシステムをインストールし、初回起動すると
ユーザー名とパスワードの設定を求められるので、設定する。

以上でWindows上にLinuxサブシステムがセットアップされる。

PowerShell上から次のコマンドを打ってみて、エラーなどが出なければ正しくセットアップされているはず。

Linuxサブシステムに割り当てられているWSLの確認

```
wsl --list --verbose
```

## Docker Desktopの設定
DockerがWSL2をベースに動き、またインストールしたLinuxサブシステムを認識するための設定。

Docker Desktopを起動し、メニューバーの「Settings」（歯車のアイコン）をクリック。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/147857/b4235381-b676-e767-022d-6ad136b9c0a0.png)

左メニューの「General」が選択された状態で、
「Use the WSL 2 based engine」が有効になっていることを確認。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/147857/166ba941-bd3b-1b58-b638-78f66f0ce4e8.png)

左メニューの「Resources」→「WSL INTEGRATION」で、
インストールしたLinuxサブシステムにチェックを入れ（自分の場合はkaki-linuxです）、
Apply ＆ RestartをクリックしてDockerを再起動。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/147857/eb213928-f87d-9dc5-30c0-d9b1c279cebe.png)

PowerShellでLinuxサブシステムを起動する。
自分の場合はkali-linuxの起動コマンド「kali」。

```
PS C:\Users\azumak> kali
```

起動したLinuxサブシステム上で、「docker -v」などと打ってみて
Dockerを認識しているか確認する。

## Laravelインストール
Linuxサブシステム上で、以下コマンドを実行してLaravel最新版をインストールする。

```
 sudo curl -s https://laravel.build/<プロジェクト名>| bash
```

ここで、「Docker is not running」と表示されて先に進まないようであれば、
Dockerが起動していないか、LinuxサブシステムがDockerを認識していない・・・かも。
自分の場合はDockerとkali-linuxの関連付けができていなかった。

うまくいけば、指定したフォルダにLaravel最新版がインストールされる。

#### Laravel Sail起動
インストールが成功すると指定したフォルダにLaravelプロジェクトが作成されるので、
プロジェクトフォルダに移動してSailコマンドを実行する。

```
cd <プロジェクト名>
./vendor/bin/sail up
```

初回はとても時間がかかる。
build成功のログが出たらhttp://localhostにアクセスし、
LaravelのTOページが表示されれば成功！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/147857/847ceecd-62ec-8a2a-748b-65de8501be2b.png)

## 参考
https://readouble.com/laravel/8.x/ja/installation.html
https://docs.microsoft.com/en-us/windows/wsl/install-win10