🐳

WSL上のUbuntuでDockerをセットアップ

2023/08/11に公開1

概要

WSL上のUbuntuでDockerセットアップしてHello-worldを実行します。

前提条件

D:\>ver

Microsoft Windows [Version 10.0.22621.2134]

D:\>systeminfo

ホスト名:               ****
OS 名:                  Microsoft Windows 11 Pro
OS バージョン:          10.0.22621 N/A ビルド 22621
OS 製造元:              Microsoft Corporation
OS 構成:                スタンドアロン ワークステーション
OS ビルドの種類:        Multiprocessor Free
登録されている所有者:   ****
登録されている組織:
プロダクト ID:          00330-52549-03326-AAOEM
最初のインストール日付: 2023/04/03, 1:53:27
システム起動時間:       2023/08/10, 3:33:02
システム製造元:         MouseComputer Co.,Ltd.
システム モデル:        DAIV-NG5300
システムの種類:         x64-based PC
プロセッサ:             1 プロセッサインストール済みです。
                        [01]: Intel64 Family 6 Model 158 Stepping 13 GenuineIntel ~3000 Mhz
BIOS バージョン:        INSYDE Corp. 1.07.05TMC, 2019/02/01
Windows ディレクトリ:   C:\WINDOWS
システム ディレクトリ:  C:\WINDOWS\system32
起動デバイス:           \Device\HarddiskVolume3
システム ロケール:      ja;日本語
入力ロケール:           ja;日本語
タイム ゾーン:          (UTC+09:00) 大阪、札幌、東京
物理メモリの合計:       32,605 MB
利用できる物理メモリ:   24,923 MB
仮想メモリ: 最大サイズ: 34,653 MB
仮想メモリ: 利用可能:   25,953 MB
仮想メモリ: 使用中:     8,700 MB
ページ ファイルの場所:  C:\pagefile.sys
ドメイン:               WORKGROUP
ログオン サーバー:      \\****
ホットフィックス:       5 ホットフィックスがインストールされています。
                        [01]: KB5028948
                        [02]: KB5012170
                        [03]: KB5029263
                        [04]: KB5028320
                        [05]: KB5028756
ネットワーク カード:    3 NIC(s) インストール済みです。
                        ~~~ 略 ~~~
Hyper-V の要件:         ハイパーバイザーが検出されました。Hyper-V に必要な機能は表示されません。

PS C:\Users\****> wsl -l -v
  NAME            STATE           VERSION
* Ubuntu-22.04    Running         2

作業内容

Dockerのインストール

yellow-monkey@****:~$ for pkg in docker.io docker-doc docker-compose podman-docker containerd runc; do sudo apt-get remove $pkg; done

yellow-monkey@****:~$ sudo apt-get update
Hit:1 http://archive.ubuntu.com/ubuntu jammy InRelease
Hit:2 http://security.ubuntu.com/ubuntu jammy-security InRelease
Hit:3 http://archive.ubuntu.com/ubuntu jammy-updates InRelease
Hit:4 http://archive.ubuntu.com/ubuntu jammy-backports InRelease
Reading package lists... Done
yellow-monkey@****:~$
yellow-monkey@****:~$ sudo apt-get install ca-certificates curl gnupg
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
ca-certificates is already the newest version (20230311ubuntu0.22.04.1).
curl is already the newest version (7.81.0-1ubuntu1.13).
gnupg is already the newest version (2.2.27-3ubuntu2.1).
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
yellow-monkey@****:~$ sudo install -m 0755 -d /etc/apt/keyrings
yellow-monkey@****:~$
yellow-monkey@****:~$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
yellow-monkey@****:~$
yellow-monkey@****:~$ sudo chmod a+r /etc/apt/keyrings/docker.gpg
yellow-monkey@****:~$  echo \
  "deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
yellow-monkey@****:~$
yellow-monkey@****:~$ sudo apt-get update
Hit:1 http://security.ubuntu.com/ubuntu jammy-security InRelease
Get:2 https://download.docker.com/linux/ubuntu jammy InRelease [48.9 kB]
Get:3 https://download.docker.com/linux/ubuntu jammy/stable amd64 Packages [21.4 kB]
Hit:4 http://archive.ubuntu.com/ubuntu jammy InRelease
Hit:5 http://archive.ubuntu.com/ubuntu jammy-updates InRelease
Hit:6 http://archive.ubuntu.com/ubuntu jammy-backports InRelease
Fetched 70.3 kB in 1s (72.8 kB/s)
Reading package lists... Done
yellow-monkey@****:~$
yellow-monkey@****:~$ sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done

Ubuntuの再起動

PS C:\Users\****> wsl --shutdown
PS C:\Users\****> wsl -l -v
  NAME            STATE           VERSION
* Ubuntu-22.04    Stopped         2
PS C:\Users\****> wsl --update
更新をチェック中...
更新をダウンロード中...
更新をインストール中...
この変更は、次回の WSL 再起動時に有効になります。強制的に再起動するには、'wsl --shutdown' を実行してください。
カーネル バージョン: 5.10.102.1
PS C:\Users\****> wsl

Dockerの動作確認

yellow-monkey@****:/mnt/c/Users/****$ sudo docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
719385e32844: Pull complete
Digest: sha256:dcba6daec718f547568c562956fa47e1b03673dd010fe6ee58ca806767031d1c
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/

sudoでなくても実行できるように設定

yellow-monkey****:/mnt/c/Users/****$ sudo usermod -aG docker $USER
yellow-monkey@****:/mnt/c/Users/****$ exit
logout
PS C:\Users\****> wsl
yellow-monkey@****:/mnt/c/Users/****$
yellow-monkey@****:/mnt/c/Users/****$ docker ps -a
CONTAINER ID   IMAGE         COMMAND    CREATED          STATUS                      PORTS     NAMES
51aac25b1ec2   hello-world   "/hello"   11 minutes ago   Exited (0) 11 minutes ago             adoring_noether
yellow-monkey@****:/mnt/c/Users/****$ docker rm adoring_noether
adoring_noether

参考資料

以下のドキュメントを参考にしました。

Discussion

きもんきーきもんきー

再起動しているうちに改善されてしまったけれど、下ようなエラーが出てくる場合があります

yellow-monkey@****:/mnt/c/Users/****$ sudo systemctl start docker
[sudo] password for yellow-monkey:
System has not been booted with systemd as init system (PID 1). Can't operate.
Failed to connect to bus: Host is down

次再現したら、きちんと対処方法を載せたいです