VSCodeのRemote Containerを使っての開発が便利なのですが、
Windowsで便利に使うには少々セットアップが必要です。
具体的にはWSL上でdockerを動かせるようにする必要があります。
情報はネット上にいくらでも転がっているのですが、
WSLの固有の問題の対策とか色々忘れるので備忘録として纏めてみました。
以下お品書き。
- WSLをインストール
- DNSを変更する(ネットワークに繋がらない場合)
- Dockerをインストール
- docker composeをインストール
- docker daemonの自動起動を設定する
- WSLの使用メモリを制限する
WSLをインストールする
1コマンドでインストールできますが、忘れがち。
wsl --install
DNSを変更する(ネットワークに繋がらない場合)
問題なくネットワークに繋がる場合はスキップでOKです。
WSLでたまにDNSで名前解決できなくなる事があります。
詳しくはこちらの記事でまとめられております。
そんな時はpublic DNSに変更しましょう。
/etc/wsl.conf
に以下追記。
[network]
generateResolvConf = false
/etc/resolv.conf
を一度削除してからDNSの設定を登録。
nameserver 8.8.8.8
/etc/resolv.conf は ../run/resolvconf/resolv.conf へのシンボリックリンクになっています。
削除せずに編集しても反映されません。
Dockerをインストールする
概ねこちらの通りです。
以下の呪文を唱えて公式のDockerリポジトリから最新版をインストールします。
[2022/01/24 修正] DockerリポジトリをAPTソースに追加するコマンドが抜けておりました
[2022/03/26 追記] apt-keyが廃止予定のためdockerインストールコマンドが変更に
※ コメントより情報頂きました、ありがとうございました。
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のインストール
概ねこちらの通りです。
バージョン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で自動起動設定可能になりました
毎回手動で起動するのも面倒なので設定しましょう。
パスワード無しでsudo service docker start
できるようにsudoに設定します。
sudo visudo
を実行して以下を追記。
# <username>はWSL起動時のユーザー名に変更すること
<username> ALL=(ALL:ALL) NOPASSWD: /usr/sbin/service docker start
~/.bashrc
に追記
if test $(service docker status | awk '{print $4}') = 'not'; then
sudo /usr/sbin/service docker start
fi
~/.bashrc
が正常に呼ばれないことがある。
その場合は~/.bash_profile
に以下のコードを追記する。
if [[ -f ~/.bashrc ]] ; then
. ~/.bashrc
fi
Windowsを起動したタイミングで上がってきてほしい場合はこちらの記事が参考になります。
WSLの使用メモリを制限する
かくかくしかじかでWSLが無限にメモリを確保しようとします。
こちらの記事で詳しくまとめてられております。
なので対策します。
%USERPROFILE%/.wslconfig
に以下追記。
メモリサイズは調整してください。
[wsl2]
memory=4GB
swap=0
さいごに
業務上WindowsをアンインストールしてUbuntu Desktopいれるわけにもいかない場合にとても便利なWSLですが、
ちょこちょこ問題がありますね。
Windows11では改善していることを願っています。