🐳

WSL2のUbuntuでDockerを使う

commits9 min read

はじめに

これは、以下の @taiga533 さんの記事と公式のインストール手順を自分用メモとしてまとめ直しただけの記事です。

https://zenn.dev/taiga533/articles/11f1b21ef4a5ff

https://docs.docker.com/engine/install/ubuntu/

手順

1. Linux 用 Windows サブシステムを有効にする

管理者として PowerShell を開いて (Win キー + X --> A)、WSL を有効にする。

PowerShell
PS C:\> dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart

2. 仮想マシンの機能を有効にする

同じく管理者として PowerShell から以下のコマンドを実行する。

PowerShell
PS C:\> dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

Windows を再起動する。

3. Linux カーネル更新プログラムパッケージをインストールする

https://docs.microsoft.com/ja-jp/windows/wsl/install-win10#step-4---download-the-linux-kernel-update-package

4. WSL 2 を既定のバージョンとして設定する

PowerShell から以下のコマンドを実行する(ユーザー権限で可)。

PowerShell
PS C:\> wsl --set-default-version 2

5. Microsoft Store から Ubuntu-20.04 をインストールする

https://www.microsoft.com/ja-jp/p/ubuntu-2004-lts/9n6svws3rx71?activetab=pivot:overviewtab

6. Ubuntu 20.04 を初回起動してユーザー名とパスワードを設定する

bash
Installing, this may take a few minutes...
Please create a default UNIX user account. The username does not need to match your Windows username.
For more information visit: https://aka.ms/wslusers
Enter new UNIX username: zenn                         # <-- ユーザー名を設定
New password:                                         # <-- パスワードを設定 (x2)
Retype new password:
passwd: password updated successfully
Installation successful!
To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.

Welcome to Ubuntu 20.04.3 LTS (GNU/Linux 5.10.16.3-microsoft-standard-WSL2 x86_64)
~ 以下略 ~

7. Ubuntu を既定の WSL 環境として設定する

PowerShell から以下のコマンドで現在の設定を確認する。

PowerShell
PS C:\> wsl --list --verbose
  NAME                   STATE           VERSION
* docker-desktop-data    Stopped         2
  docker-desktop         Stopped         2
  Ubuntu-20.04           Running         2

Ubuntu-20.04 に * (アスタリスク) が表示されていない場合は修正する。

PowerShell
PS C:\> wsl --set-default Ubuntu-20.04

一番右の列のバージョンが 2 となっていない場合も同様に修正する。

PowerShell
PS C:\> wsl --set-default-version 2

PS C:\> wsl --list --verbose
  NAME                   STATE           VERSION
* Ubuntu-20.04           Running         2
  docker-desktop-data    Stopped         2
  docker-desktop         Stopped         2

8. Windows ターミナルのインストール(オプション)

https://www.microsoft.com/ja-jp/p/windows-terminal/9n0dx20hk701

Windows ターミナルを起動するとプルダウンメニューへ Ubuntu 20.04 が自動的に追加されています。

ターミナル起動時のカレントディレクトリをホームディレクトリとする

プルダウンメニュー -> 設定 -> プロファイル -> Ubuntu 20.04 の「ディレクトリの開始」へ次のように入力する。

\\wsl$\Ubuntu-20.04\home\#6で設定したユーザー名

9. Ubuntu のリポジトリ参照先を変更してアップデートを高速化する(オプション)

Ubuntu on WSL のターミナルを開き、現状を確認する。

bash
~$ cat /etc/apt/sources.list | sed -e "/^#/d" -e "/^$/d"

deb http://archive.ubuntu.com/ubuntu/ focal main restricted
deb http://archive.ubuntu.com/ubuntu/ focal-updates main restricted
deb http://archive.ubuntu.com/ubuntu/ focal universe
deb http://archive.ubuntu.com/ubuntu/ focal-updates universe
deb http://archive.ubuntu.com/ubuntu/ focal multiverse
deb http://archive.ubuntu.com/ubuntu/ focal-updates multiverse
deb http://archive.ubuntu.com/ubuntu/ focal-backports main restricted universe multiverse
deb http://security.ubuntu.com/ubuntu/ focal-security main restricted
deb http://security.ubuntu.com/ubuntu/ focal-security universe
deb http://security.ubuntu.com/ubuntu/ focal-security multiverse

ミラーサイトを参照するように変更する。

bash
~$ sudo sed -i.bak -r 's!deb \S+!deb mirror://mirrors.ubuntu.com/mirrors.txt!' /etc/apt/sources.list
bash
~$ cat /etc/apt/sources.list | sed -e "/^#/d" -e "/^$/d"

deb mirror://mirrors.ubuntu.com/mirrors.txt focal main restricted
deb mirror://mirrors.ubuntu.com/mirrors.txt focal-updates main restricted
deb mirror://mirrors.ubuntu.com/mirrors.txt focal universe
deb mirror://mirrors.ubuntu.com/mirrors.txt focal-updates universe
deb mirror://mirrors.ubuntu.com/mirrors.txt focal multiverse
deb mirror://mirrors.ubuntu.com/mirrors.txt focal-updates multiverse
deb mirror://mirrors.ubuntu.com/mirrors.txt focal-backports main restricted universe multiverse
deb mirror://mirrors.ubuntu.com/mirrors.txt focal-security main restricted
deb mirror://mirrors.ubuntu.com/mirrors.txt focal-security universe
deb mirror://mirrors.ubuntu.com/mirrors.txt focal-security multiverse

https://qiita.com/kujiraza/items/c02908e0aed1001b2470

10. Ubuntu 20.04 をアップデートする

bash
~$ sudo apt update
~$ sudo apt upgrade -y

11. 必要なパッケージをインストールする

bash
~$ sudo apt install apt-transport-https -y

12. Docker Engine をインストールする

Docker 公式 GPG 鍵を追加

bash
~$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

Docker 安定版のレポジトリを追加

bash
~$ 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

レポジトリをアップデートし、Docker Engine をインストール

bash
~$ sudo apt update
~$ sudo apt install docker-ce docker-ce-cli containerd.io -y

docker-compose もインストール

bash
~$ sudo apt install docker-compose -y

13. Docker デーモンを起動

bash
:~$ sudo service docker start

 * Starting Docker: docker       [ OK ]

14. ユーザーを Docker グループに追加

bash
~$ sudo gpasswd -a ユーザー名 docker

Adding user ユーザー名 to group docker

ターミナルを再起動、または再ログイン

15. テストフライト

サービス一覧の稼働状況を確認し、docker デーモンが動いていなかったら起動する。

bash
~$ service --status-all
 [ - ]  apparmor
 [ ? ]  apport
 [ - ]  atd
 [ - ]  console-setup.sh
 [ - ]  cron
 [ ? ]  cryptdisks
 [ ? ]  cryptdisks-early
 [ - ]  dbus
 [ - ]  docker
 [ ? ]  hwclock.sh
 [ + ]  irqbalance
 ~ 以下略 ~

 ~$ sudo service docker start

hello-world コンテナを実行。

https://docs.docker.jp/engine/userguide/containers/dockerizing.html
bash
~$ docker run hello-world

Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
b8dfde127a29: Pull complete
Digest: sha256:7d91b69e04a9029b99f3585aaaccae2baa80bcf318f4a5d2165a9898cd2dc0a1
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/
bash
~$ docker ps -a

CONTAINER ID   IMAGE         COMMAND    CREATED         STATUS                     PORTS     NAMES
9ba3b9aa295d   hello-world   "/hello"   2 minutes ago   Exited (0) 2 minutes ago             happy_wozniak

~$ docker images

REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
hello-world   latest    d1165f221234   6 months ago   13.3kB

16. こちらもどうぞ

https://zenn.dev/sprout2000/articles/a4c59a294dcbae
GitHubで編集を提案

Discussion

ログインするとコメントできます