【開発環境】WSL＋Docker

## やりたいこと
WSLにUbuntuをいれDockerで管理したい
Dockerは、無料のRancherDesktopを利用
RancherDesktopが安定しなかったので、構築手順をメモ書きする

## Step1．Hyper-Vの状態確認
WSLで必要なHyper-Vの状態が有効であることを確認
PowerShellを起動し以下のコマンドを実行
#### コマンド（PowerShell）
~~~sh
Get-WindowsOptionalFeature -FeatureName Microsoft-Hyper-V-All -Online
~~~
#### 実行結果
~~~sh
FeatureName      : Microsoft-Hyper-V-All
DisplayName      : Hyper-V
Description      : 仮想マシンおよびそのリソースを作成および実行するためのサービスおよび管理ツールを提供します。
RestartRequired  : Possible
State            : Enabled
CustomProperties :
~~~
## Step2．WSLの版数確認／最新化
WSLが最新でない場合、動作が安定しない場合があるため、最新版にしておいた方が良い
### 1．WSL版数確認
#### コマンド（PowerShell）
~~~sh
# WSLの版数が低い場合は、このコマンドがないっぽい(2.0.9.0では存在した)
wsl --version
~~~
#### 実行結果
~~~sh
WSL バージョン: 2.0.9.0
カーネル バージョン: 5.15.133.1-1
WSLg バージョン: 1.0.59
MSRDC バージョン: 1.2.4677
Direct3D バージョン: 1.611.1-81528511
DXCore バージョン: 10.0.25131.1002-220531-1700.rs-onecore-base2-hyp
Windows バージョン: 10.0.19045.3930
~~~
### 2．WSL更新
MicrosoftのGithubにアクセス
現行より新しい物があれば、ダウンロードしてインストール
※2024年2月7日現在の最新は2.1.1版
#### URL
[https://github.com/microsoft/WSL/releases](https://github.com/microsoft/WSL/releases)

## Step3．Linuxのインストール
### インストール
Microsft Storeから構築したいLinuxのdistributionを検索
自分の場合は、Ubuntu 22.04LTS版をインストールした
※ダウンロードには、それなりの時間がかかる

### ユーザ作成
Microsft Storeから「開く」を実行か、スタートメニューからインストールしたdistributionを起動
Linuxのユーザを作成する
#### 画面（Linuxコンソール）
~~~sh
Installing, this may take a few minutes...
Please create a default UNIX user account. The username does not need to match your Windows username.
For more information visit: https://aka.ms/wslusers
Enter new UNIX username: [任意のユーザ名を入力]
# ↓パスワード入力へ
New password: [任意のパスワードを入力] ※sudo時のパスワードになる
Retype new password: [上記と同じパスワードを入力]
# ↓ユーザ作成完了
passwd: password updated successfully
~~~
### WSL確認
PowerShellでインストールされ、かつ起動しているかを確認
#### コマンド（PowerShell）
~~~sh
wsl -l -v
~~~
#### 実行結果
~~~sh
  NAME            STATE           VERSION
* Ubuntu-22.04    Running         2
~~~
WSLに選択されているLinuxが起動していることが確認できる


## Step4．Dockerアカウント作成
既に持っている場合はSkip
持っていない場合は、アカウントを作成
#### URL
[https://hub.docker.com/signup](https://hub.docker.com/signup)

## Step5．RancherDesktopの設定
### 1．インストール
既にインストール済みの場合は、Skip
未インストールの場合は、以下から取得
#### URL
[https://github.com/rancher-sandbox/rancher-desktop/releases](https://github.com/rancher-sandbox/rancher-desktop/releases)

### 2．Docker用の設定
初回起動時のみ行う
#### 2-1．Docker設定とWSLイメージの割り当て
画像の通りに行う
docker設定(起動時に表示されるファーストビュー)
![2.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3468893/e11721d4-1b71-c749-e2bf-80f73509cc71.gif)

File>Preferences>WSLからWSLイメージ設定
![1.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3468893/f16524e7-4099-8d23-cc73-77c627011d11.gif)


#### 2-2．RancherDesktopがWSLに組み込まれたかを確認
PowerShellでインストールされ、かつ起動しているかを確認
##### コマンド（PowerShell）
~~~sh
wsl -l -v
~~~
##### 実行結果
~~~sh
  NAME            STATE           VERSION
* Ubuntu-22.04            Running         2
  rancher-desktop-data    Stopped         2
  rancher-desktop         Running         2
~~~
rancher-desktopが追加されていることを確認

#### 3．RancherDesktopのProxy設定
Proxyを使用していなければSkip
PowerShellでインストールされ、かつ起動しているかを確認
##### コマンド（PowerShell）
~~~sh
wsl -d rancher-desktop

# ↓rancher-desktopのイメージに入る
#   設定ファイルにProxyを追加
vi /etc/rc.conf

# ↓のような記載を追記
rc_env_allow="http_proxy http_proxy no_proxy"
export http_proxy="192.168.1.1:80"
export https_proxy="192.168.1.1:443"
~~~

## Step6．Dockerの動作確認
Dockerのプロジェクトがある場合は、それを利用
プロジェクトが無い場合は、以下で動作確認用のプロジェクトを作成

### 1．Dockerの起動ファイルを作成
WSLのLinux上で、以下のコマンドをでファイルを作成
##### コマンド（Linux）
~~~sh
# 起動直後、/home/[user]ディレクトリにいるのでDocker用のフォルダを作成
mkdir test
# フォルダに移動し起動ファイルを作成
cd test
vi docker-compose.yml
# ↓viエディタ上で以下を設定
#  インテントが正しくない場合、起動時にMappingエラーが発生する
version: '3.1'
services:
    app:
        image: php:7.3.6-apache
        ports:
            - "80:80"
        volumes:
            - .:/var/www/html
~~~
### 2．コンテンツを作成
上記から、別途新規のファイルを作成
##### コマンド（Linux）
~~~sh
vi index.php
# ↓viエディタ上で以下を設定
<?php phpinfo();
~~~

### 3．Dockerを起動
以下のコマンドで起動する
初回のコマンド実行時、Dockerからライブラリを取得してくるため時間がかかる
##### コマンド（Linux）
~~~sh
# 初回のみのおまじない
docker login
# Webサーバ起動コマンド
# -f省略時、docker-compose.ymlを参照する
docker-compose up -d
~~~
### 4．動作確認
Webブラウザで以下にアクセスし、ページが表示されれば構築は完了
[http://localhost](http://localhost)


### 最後に
- Windowsを終了する場合などは、RancherDesktopを正しく終了させないと、次回起動時に環境が壊れやすい気がする
- RancherDesktopで吐き出されるエラー（WSLのエラー）は、解決の糸口につながることはないため、問題発生時はFactoryResetをしたほうがはやい
- 素直に、古いPCにLinuxをインストールして再利用した方が良い気もする