WSL2のDebianにDockerをインストールする

プログラミングをするにあたって環境構築が面倒になってきたので、Dockerを利用したいと思います。Dockerを使うことによって、環境の構築と破棄が簡単になり、本番に近い環境を構築するのが楽になります。

また、トラブルがあったとき面倒なので、仕事で使っているパソコンにXAMPPをインストールしたくありません。そこで、WSL2のDebianにDockerをインストールして、Windowsからは隔離された状態での環境構築を目指します。

Dockerのインストール

ここ(https://docs.docker.com/engine/install/debian/)を参考にWSL2のDebianを立ち上げて、Dockerをインストールします。

 sudo apt remove docker docker-engine docker.io containerd runc
 sudo apt update
 sudo apt install \
    ca-certificates \
    curl \
    gnupg \
    lsb-release
 curl -fsSL https://download.docker.com/linux/debian/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/debian \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
 sudo apt update
 sudo apt install docker-ce docker-ce-cli containerd.io
sudo service docker start

エラー(fstabファイル)

Dockerをインストールして起動させると、こんな感じで、何故かエラーがでます。

$ sudo service docker start
grep: /etc/fstab: No such file or directory
[ ok ] Starting Docker: docker.
$ sudo service docker status
[FAIL] Docker is not running ... failed!

よくわからないので、ここ(https://github.com/microsoft/WSL/discussions/4872)を参考に設定していきます。

どうやら、WSL2のDebianでは、fstabファイルがないので作成してiptablesの設定をしないとダメみたいです。

基本的に、よくわかっていないのでコピペです。

sudo touch /etc/fstab
sudo update-alternatives --set iptables /usr/sbin/iptables-legacy
sudo update-alternatives --set ip6tables /usr/sbin/ip6tables-legacy

ちなみに、ip6tablesの方は書かなくても起動しました。

$ sudo touch /etc/fstab

$ sudo update-alternatives --set iptables /usr/sbin/iptables-legacy
update-alternatives: using /usr/sbin/iptables-legacy to provide /usr/sbin/iptables (iptables) in manual mode

$ sudo update-alternatives --set ip6tables /usr/sbin/ip6tables-legacy
update-alternatives: using /usr/sbin/ip6tables-legacy to provide /usr/sbin/ip6tables (ip6tables) in manual mode

$ sudo service docker start
[ ok ] Starting Docker: docker.

$ sudo service docker status
[ ok ] Docker is running.

$ sudo docker ps -a
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES