Windows Subsystem for Linuxガイド 第36回 WSL2でDockerを使う その2「Dockerエンジン編」
今回は、「WSLでDockerを使う」の2回目として、WSLに直接Dockerエンジンをインストールする方法を解説する。この記事では先頭を大文字にしたDockerは、ソフトウェアの名称としてのDockerを表し、先頭が小文字の場合、パッケージ名やコマンド名になる。
“Docker Desktop”を、インストールしてコンテナを動かす場合を「Dockerデスクトップ」と表記し、WSLディストリビューション内で、Linux用のdockerパッケージ(docker-ce。docker container engine)を、使ってDockerを動かすことを「Dockerエンジン」と表記する。
DockerエンジンとDockerデスクトップの併用
Docker Desktopがインストールされている場合、WSLのデフォルト・ディストリビューションは、WSL integrationが有効になり、Docker Desktopを利用するDocker cli(コマンドラインのdockerコマンド)が自動的に利用できるようになる。これは、Docker Desktopと同じコンテナ環境を使うもので、PowerShellなどで実行するdockerコマンドと同等になる。これが有効になっていると、WSLディストリビューションにDockerエンジンをインストールしてもそれを使うことができない。
このため、WSLでDockerエンジンを使う場合、Docker Desktopをインストールしない。あるいは、Docker Desktopの設定 ⇒ Resources ⇒ WSL integration ⇒ Enable integration with my default WSL distroを、オフにする(写真01)。この設定の下のEnable integration with additional distros:にある、インストールしようとしているディストリビューションのトグルスイッチがオンになっていれば、これをオフにする。これで、WSLディストリビューションにDockerエンジンを独立してインストールする準備ができた。
写真01: Docker Desktopには、WSLディストリビューションでも、Win32側のPowerShellと同じくDockerデスクトップ側のcliを使う「WSL integration」機能がある。この機能が有効になっていると、WSL側のcliコマンド(dockerコマンド)は、Dockerデスクトップのコンテナに対して働く。WSL側でDockerエンジンを動かしたい場合には、この機能を無効にする
WSLに直接Dockerエンジンをインストールする
Dockerエンジンを使う場合、WSLディストリビューションの中で、パッケージ管理コマンドを使ってインストールを行う。dockerは、独自のリポジトリを持っており、パッケージ管理コマンドに対して、リポジトリや証明書の登録を行う必要がある。この設定を行っておくことで、以後dockerエンジンを、パッケージマネージャー経由でアップデート(アップグレード)することが可能になる。ここでは、WSLディストリビューションのうちUbuntu/Ubuntu-22.04上で、Dockerエンジンをインストールする方法を解説する。apt/dpkg系のパッケージマネージャーを使っていれば、手順はほぼ同じだが、パッケージマネージャが異なる場合には、コマンドも異なる点に注意されたい。他のプラットフォームも含めてDockerエンジンのインストールに関しては、DockerのWebサイトのページ(Install Docker Engine|Docker Docs)で解説されている。
ここにはUbuntuのインストール方法(英語)があるが、WSLのUbuntu/Ubuntu-22.04では、curlやca-certificatesのインストールは初期インストールに含まれており、/etc/apt/keyringのパーミッションも設定ずみでありインストールは不要である。
最初に“sudo apt update”でパッケージを更新しておく。次に以下のコマンドでDockerのGPGキーをダウンロードし、/etc/apt/keyringに保存する。これはリポジトリを登録するのに必要な作業だ。
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
次にDockerのリポジトリをaptパッケージマネージャに登録する
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
再度、“sudo apt update”でパッケージの更新を行う。
その後、以下のコマンドでDockerエンジンやdocker cliなどをインストールする。
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
インストールが終わったら、自分自身をdockerグループに追加して、sudoを使わずにdockerコマンドを起動できるようにする。それには、以下のコマンドを使う。
sudo usermod -aG docker shio
コマンドを実行したら、所属グループを有効にするため、再ログインを行う。同一のWSLディストリビューションは同一のユーザーアカウントを使うので、複数のWSLセッションが起動しているなら、すべてを抜ける必要がある。あるいは、WSLディストリビューションの終了(wsl.exe --terminate)や、WSLのシャットダウン(wsl --shutdown)を行う方がいいかもしれない。
最後に以下のコマンドを使い、インストールや設定が正常に終了したかを確認する。
docker run hello-world
出力に「Hello from Docker!」という表示が、出ていれば問題ない(写真02)。
写真02: Dockerエンジンのインストールが完了したら、docker run hello-worldコマンドで、テスト用のコンテナを起動する。このような表示が出るならDockerエンジンのインストールは成功である
なお、簡易な方法として、dockerの提供するシェル・スクリプトを使った方法がある。具体的には、以下のコマンドを実行する。
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
1行目のコマンドで、シェルスクリプト(get-cocker.sh)をダウンロードし、2行目のコマンドで実行している。ただし、この方法では、Dockerのアップデートは、ユーザー自身がその有無を確認して、手動で行わねばならない。テストなどの目的で一回だけのインストールを行うのには向いているが、継続的に使う場合には前記の方法を使うべきだろう。
次回は、Dockerデスクトップ、Dockerエンジンのそれぞれのネットワーク接続について解説する予定だ。
> Windows Subsystem for Linuxガイド 連載バックナンバー
https://news.mynavi.jp/tag/winsubsystem/