ようやくちょっと時間ができたので、自宅のWindows10に開発環境を準備しようとした作業メモ①です。
WSL2 で Ubunutu をインストールする
Windows 10 に WSL をインストールする | Microsoft Docsなどを参考にするとよい。
気を付けるべきこと
Ubuntuをインストールしたら、WSL2でインストールされていることを確認しておきましょう。後述しますが、昔使った環境を流用しようとしたらWSL1だったので、余計な時間を使いました。
> wsl --list --verbose NAME STATE VERSION * Ubuntu-20.04 Stopped 2
Ubuntu をとりあえず最新化
sudo apt-get update sudo apt-get upgrade
((そういえば、apt-get
よりapt
を使う方がよかったんだよなーとか実行してから気付いた)
Docker をインストール
とりあえず Ubuntu20.04 でapt search
してみると、Ubuntu のレポジトリにはdocker.io
があるので何も考えずapt install
することが可能。一方で公式の、Install Docker Engine on Ubuntu | Docker Documentationに従ってインストール方法もあるようだ。
- 公式の方法で 既存の Ubuntu18.04 環境にインストールするも失敗
- 20.04 に docker.io をインストールするも失敗
したので、結局、新しい Ubuntu20.04 環境に Docker 公式の方法でインストールすることにします。
sudo apt-get update sudo apt-get install \ apt-transport-https \ 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=amd64 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
docker の動作確認
デーモン起動 & デーモン起動確認 & Hello Worldをします。
$ sudo service docker start * Starting Docker: docker [ OK ] $ sudo service docker status * Docker is running $ sudo docker run hello-world Unable to find image 'hello-world:latest' locally latest: Pulling from library/hello-world b8dfde127a29: Pull complete Digest: sha256:61bd3cb6014296e214ff4c6407a5a7e7092dfa8eefdbbec539e133e97f63e09f Status: Downloaded newer image for hello-world:latest Hello from Docker! This message shows that your installation appears to be working correctly. To generate this message, Docker took the following steps: 1. The Docker client contacted the Docker daemon. 2. The Docker daemon pulled the "hello-world" image from the Docker Hub. (amd64) 3. The Docker daemon created a new container from that image which runs the executable that produces the output you are currently reading. 4. The Docker daemon streamed that output to the Docker client, which sent it to your terminal. To try something more ambitious, you can run an Ubuntu container with: $ docker run -it ubuntu bash Share images, automate workflows, and more with a free Docker ID: https://hub.docker.com/ For more examples and ideas, visit: https://docs.docker.com/get-started/
ちゃんとHello Worldできました。よかった...
発生した問題
Docker デーモンが起動しない
Ubuntu18.04 において、Install Docker Engine on Ubuntu | Docker Documentationに従ってインストールを実施したところ、 Docker デーモンを起動しようとすると、一時的に起動しているようだがすぐ停止してしまう。
$ sudo service docker start * Starting Docker: docker [ OK ] $ sudo service docker status * Docker is running $ sudo service docker status * Docker is not running
準備していた環境がだいぶ前に作ったUbuntu環境だったので、改めてUbuntu 20.04 LTSをインストールて、docker.ioを使ってみたり、改めて公式イメージを使ってみたが改善しない。
WSL 2でCannot connect to the Docker daemonと言われたら、デフォルトを確認する。 | Ginpen.comなどを確認すると、ちゃんと WSL2 が利用されているか確認した方がよさそうなので確認する。
> wsl --list --verbose NAME STATE VERSION * Ubuntu-20.04 Running 1
...残念ながら WSL1 で動いていたようなので Version を変更する。うーん、無駄な時間を使ってしまった。
> wsl --set-default-version 2 この操作を正しく終了しました。 > wsl --set-version Ubuntu-20.04 2 変換中です。この処理には数分かかることがあります... WSL 2 との主な違いについては、https://aka.ms/wsl2 を参照してください 変換が完了しました。 > wsl --list --verbose NAME STATE VERSION * Ubuntu-20.04 Stopped 2
こうするとDockerデーモンが普通に起動するようになりました。
docker.io をインストールしても、Docker デーモンを起動できない
docker.io
をインストールする例が余り日本語で見つけられなかったのだが、apt show docker.io
でみるとパッケージ 1 つで動作しそうだし、apt changelog docker.io
してみてもそこそこ更新はされてるようだったので、docker.io
を使っても大丈夫だろうと判断して実行しようとした。*1
しかし、docker.io
を WSL2 上の Ubuntu20.04 インストールして、docker デーモンを起動しようとするが、そもそもサービスとしてインストールされておらず起動できない。sudo service --status-all
を実行しても表示されない。
$ sudo service docker start docker: unrecognized service
どうやらdocker.io
はsystemctl
で操作することが前提のようなのだが、WSL2 ではSystemd
が無効化されていて、sytemctl
は使えない。つまりdocker.io
を WSL2 で使うのは困難そうなことが分かった。このため Docker 公式の方法でインストールすることにした。
WSL2 において、なぜ Sytemd が使えないか&無理やり使う方法はこちらなどを参照のこと。 WSL2 で Systemd を使うハック - Qiita
※この後、UbuntuがWSL1で動いていたことが分かったのだが、どちらにしろ原因は上記だと思っています。
*1:docker.io と公式の docker の違いは、ubuntu - What is docker.io in relation to docker-ce and docker-ee? - Stack Overflowあたりを参考。