Windows10でWSL2(Ubuntu)でDockerを動かすためにやる事一覧

VSCodeのRemote Containerを使っての開発が便利なのですが、
Windowsで便利に使うには少々セットアップが必要です。

具体的にはWSL上でdockerを動かせるようにする必要があります。

情報はネット上にいくらでも転がっているのですが、
WSLの固有の問題の対策とか色々忘れるので備忘録として纏めてみました。

以下お品書き。

- WSLをインストール
- DNSを変更する(ネットワークに繋がらない場合)
- Dockerをインストール
- docker composeをインストール
- docker daemonの自動起動を設定する
- WSLの使用メモリを制限する

# WSLをインストールする

１コマンドでインストールできますが、忘れがち。

```
wsl --install
```

# DNSを変更する(ネットワークに繋がらない場合)

問題なくネットワークに繋がる場合はスキップでOKです。
WSLでたまにDNSで名前解決できなくなる事があります。
詳しくはこちらの記事でまとめられております。

https://qiita.com/kkato233/items/1fc71bde5a6d94f1b982


そんな時はpublic DNSに変更しましょう。

`/etc/wsl.conf`に以下追記。

```wsl.conf
[network]
generateResolvConf = false
```

`/etc/resolv.conf`を**一度削除してから**DNSの設定を登録。

```resolv.conf
nameserver 8.8.8.8
```

:::note warn
/etc/resolv.conf は ../run/resolvconf/resolv.conf へのシンボリックリンクになっています。
削除せずに編集しても反映されません。
:::



# Dockerをインストールする

概ねこちらの通りです。

https://docs.docker.com/engine/install/ubuntu/#installation-methods

以下の呪文を唱えて公式のDockerリポジトリから最新版をインストールします。
__[2022/01/24 修正] DockerリポジトリをAPTソースに追加するコマンドが抜けておりました__
__[2022/03/26 追記] apt-keyが廃止予定のためdockerインストールコマンドが変更に__
※ [コメント](https://qiita.com/The-Fujimon-Company/items/80a9572659f624ef0879#comment-02e287964b1edeab17d5)より情報頂きました、ありがとうございました。

```
sudo apt-get update
sudo apt-get install ca-certificates curl gnupg lsb-release
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo \
  "deb [arch=$(dpkg --print-architecture) 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
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io
```

sudo無しでdockerコマンド使いたい場合はユーザーをdockerグループに追加します。

```
sudo usermod -aG docker ${USER}
su - ${USER}
```

deamonの起動はsystemctlが使えないので以下のコマンドで行います。

```
sudo service docker start
```

# docker composeのインストール

概ねこちらの通りです。

https://www.digitalocean.com/community/tutorials/how-to-install-and-use-docker-compose-on-ubuntu-20-04-ja

バージョン`v2.2.2`の所は適宜変更しましょう。

```
sudo curl -L "https://github.com/docker/compose/releases/download/v2.2.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
```

# docker daemonの自動起動を設定する

[※ Windows11では/etc/wsl.confで自動起動設定可能になりました](https://qiita.com/The-Fujimon-Company/items/80a9572659f624ef0879#comment-02e287964b1edeab17d5)

毎回手動で起動するのも面倒なので設定しましょう。
パスワード無しで`sudo service docker start`できるようにsudoに設定します。
`sudo visudo`を実行して以下を追記。

```
# <username>はWSL起動時のユーザー名に変更すること
<username> ALL=(ALL:ALL) NOPASSWD: /usr/sbin/service docker start
```

`~/.bashrc`に追記

```~/.bashrc
if test $(service docker status | awk '{print $4}') = 'not'; then
    sudo /usr/sbin/service docker start
fi
```

`~/.bashrc`が正常に呼ばれないことがある。
その場合は`~/.bash_profile`に以下のコードを追記する。

```~/.bash_profile
if [[ -f ~/.bashrc ]] ; then
  . ~/.bashrc
fi
```

Windowsを起動したタイミングで上がってきてほしい場合はこちらの記事が参考になります。

https://qiita.com/forest1/items/ab6d8b345653c614229b

# WSLの使用メモリを制限する

かくかくしかじかでWSLが無限にメモリを確保しようとします。

https://github.com/microsoft/WSL/issues/4166

こちらの記事で詳しくまとめてられております。

https://qiita.com/yoichiwo7/items/e3e13b6fe2f32c4c6120

なので対策します。
`%USERPROFILE%/.wslconfig`に以下追記。
メモリサイズは調整してください。

``` /.wslconfig
[wsl2]
memory=4GB
swap=0
```

# さいごに
業務上WindowsをアンインストールしてUbuntu Desktopいれるわけにもいかない場合にとても便利なWSLですが、
ちょこちょこ問題がありますね。
Windows11では改善していることを願っています。