WSL Ubuntu に Docker CE をインストール

WSL Ubuntu に Docker CE をインストール・動作確認・アンインストールする方法を解説


やりたいこと

  1. WSL Ubuntu に DockerCE を導入

※ Docker CE とは :

  • Docker の Community Edition (無料版)のこと
  • ここでは、Dockerの無料版ツールを総称して Docker CE という
    • Docker Engine
    • Docker Compose
    • Docker Build
    • etc…

環境情報

環境 バージョン
OS Windows 11 Pro 23H2
OS ビルド 22631.3527
Git for Windows 2.45.0.windows.1
WSL 2.1.5.0
Ubuntu 22.04.4 LTS
Windows Terminal 1.19.11213.0
Visual Studio Code 1.88.1
Git (Ubuntu) 2.43.3
docker 26.1.0
docker-compose v2.26.1

2024-05-05 現在


前提条件

Windows11 WSL Ubuntu VSCode Git GitHub 環境構築 を実施済

Docker CE インストール

Ubuntu に Docker をインストールする方法は4つある

  1. Dockerが提供するスクリプトを使用
  2. Dockerのaptリポジトリからインストール
  3. Dockerの公式サイトから直接パッケージをダウンロードしてインストール
  4. Docker Desktop for Linux をインストール
    WSL環境ではインストール不可

情報源:Install Docker Engine on Ubuntu | Docker Docs

Docker インストールスクリプトを使用

この方法は、以下の場合には推奨

  • 開発環境
  • テスト環境

本番環境では、非推奨

  • 中間者攻撃(MITM)などのセキュリティリスクが存在する
    スクリプトはインターネットから直接ダウンロードして実行される
    スクリプトの内容を事前に検証すべき
  • カスタマイズ不可
    本番環境用に、詳細な設定や最適化ができない

  1. curl コマンドを使用して Docker のインストールスクリプトをダウンロード
1
curl -fsSL https://get.docker.com -o get-docker.sh
  1. スクリプトを sudo 権限で実行して Docker をシステムにインストール
1
sudo sh get-docker.sh
  1. インストールスクリプトを削除
1
rm get-docker.sh

実行ログ:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
# Executing docker install script, commit: e5543d473431b782227f8908005543bb4389b8de

WSL DETECTED: We recommend using Docker Desktop for Windows.
Please get Docker Desktop from https://www.docker.com/products/docker-desktop/


You may press Ctrl+C now to abort this script.
+ sleep 20
+ sh -c apt-get update -qq >/dev/null
+ sh -c DEBIAN_FRONTEND=noninteractive apt-get install -y -qq apt-transport-https ca-certificates curl >/dev/null
+ sh -c install -m 0755 -d /etc/apt/keyrings
+ sh -c curl -fsSL "https://download.docker.com/linux/ubuntu/gpg" | gpg --dearmor --yes -o /etc/apt/keyrings/docker.gpg
+ sh -c chmod a+r /etc/apt/keyrings/docker.gpg
+ sh -c echo "deb [arch=amd64 signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu noble stable" > /etc/apt/sources.list.d/docker.list
+ sh -c apt-get update -qq >/dev/null
+ sh -c DEBIAN_FRONTEND=noninteractive apt-get install -y -qq docker-ce docker-ce-cli containerd.io docker-compose-plugin docker-ce-rootless-extras docker-buildx-plugin >/dev/null
+ sh -c docker version
Client: Docker Engine - Community
 Version:           26.1.0
 API version:       1.45
 Go version:        go1.21.9
 Git commit:        9714adc
 Built:             Mon Apr 22 17:06:54 2024
 OS/Arch:           linux/amd64
 Context:           default

Server: Docker Engine - Community
 Engine:
  Version:          26.1.0
  API version:      1.45 (minimum version 1.24)
  Go version:       go1.21.9
  Git commit:       c8af8eb
  Built:            Mon Apr 22 17:06:54 2024
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.6.31
  GitCommit:        e377cd56a71523140ca6ae87e30244719194a521
 runc:
  Version:          1.1.12
  GitCommit:        v1.1.12-0-g51d5e94
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0

================================================================================

To run Docker as a non-privileged user, consider setting up the
Docker daemon in rootless mode for your user:

    dockerd-rootless-setuptool.sh install

Visit https://docs.docker.com/go/rootless/ to learn about rootless mode.


To run the Docker daemon as a fully privileged service, but granting non-root
users access, refer to https://docs.docker.com/go/daemon-access/

WARNING: Access to the remote API on a privileged Docker daemon is equivalent
         to root access on the host. Refer to the 'Docker daemon attack surface'
         documentation for details: https://docs.docker.com/go/attack-surface/

================================================================================

Dockerのaptリポジトリからインストール

  1. 最新のパッケージリストを更新
1
sudo apt-get update
  1. ca-certificates(SSL/TLSを使った安全な通信をするための証明書)、curl(データ転送ツール)をインストール
1
sudo apt-get install ca-certificates curl
  1. パーミッション(0755)で/etc/apt/keyringsディレクトリを作成
1
sudo install -m 0755 -d /etc/apt/keyrings
  1. Dockerの公式GPGキーをダウンロードし、gpgコマンドでデコードして/etc/apt/keyrings/docker.gpgに保存
1
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
  1. 作成したGPGキーファイルに対して、全ユーザーが読み取り可能にするためのパーミッションを設定
1
sudo chmod a+r /etc/apt/keyrings/docker.asc
  1. DockerのパッケージリポジトリをAPTのソースリストに追加
1
2
3
4
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
  1. 再びパッケージリストを更新. 今回はDockerのリポジトリも含まれる
1
sudo apt-get update
  1. Docker Engine(docker-ce)、Dockerのコマンドラインインターフェース(docker-ce-cli)、コンテナランタイム(containerd.io)、ビルドツールプラグイン(docker-buildx-plugin)、Docker Composeプラグイン(docker-compose-plugin)、DockerのRootlessモード用エクストラ(docker-ce-rootless-extras)をインストール
1
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin docker-ce-rootless-extras

dockerユーザグループを追加設定

Dockerユーザグループを作成する主な理由は、sudoコマンドを使わずにDockerコマンドを実行できるようにするため

情報源:Linux post-installation steps for Docker Engine | Docker Docs


1. 新しいユーザグループdockerを追加

1
sudo groupadd docker

2. dockerグループに現在のユーザを追加

1
sudo usermod -aG docker $USER

3. 現在のユーザーグループがdockerに変更され、そのグループ権限を適用した状態で新しいシェルが起動

1
newgrp docker

または、シェルを再起動

Docker動作確認

hello-world を使ってDockerの動作確認を簡単に行う

情報源:docker | Docker Docs


docker のバージョン確認

1
docker --version

実行結果(例):

1
Docker version 26.1.0, build 9714adc

docker-compose のバージョン確認

1
docker compose version

実行結果(例):

1
Docker Compose version v2.26.1

docker buildx のバージョン確認

1
docker buildx version

実行結果(例):

1
github.com/docker/buildx v0.14.0 171fcbe

Dockerイメージのリストを表示

1
docker image ls

エイリアス↓ 通常はこちらを使う

1
docker images

実行結果:

1
REPOSITORY   TAG       IMAGE ID   CREATED   SIZE

Dockerイメージは一つもない


Dockerコンテナの一覧を表示

-a はすべてのコンテナを表示するオプション(デフォルトは実行中のみを表示)

1
docker container ls -a

エイリアス↓ 通常はこちらを使う

1
docker ps -a

実行結果:

1
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

Dockerコンテナは一つもない


hello-world コンテナを実行

1
docker run hello-world

実行結果(原文):

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
c1ec31eb5944: Pull complete
Digest: sha256:a26bff933ddc26d5cdf7faa98b4ae1e3ec20c4985e6f87ac0973052224d24302
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/

再度、Dockerイメージのリストを表示

1
docker images

実行結果(例):

1
2
REPOSITORY    TAG       IMAGE ID       CREATED         SIZE
hello-world   latest    d2c94e258dcb   12 months ago   13.3kB

再度、Dockerコンテナの一覧を表示

1
docker ps -a

実行結果(例):

1
2
CONTAINER ID   IMAGE         COMMAND    CREATED              STATUS                          PORTS     NAMES
0a1955e4785b   hello-world   "/hello"   About a minute ago   Exited (0) About a minute ago             goofy_hopper

Dockerコンテナを削除

<CONTAINER> には、docker ps -aで取得した CONTAINER ID または NAMES を指定する

1
docker container rm <CONTAINER>

エイリアス↓ 通常はこちらを使う

1
docker rm <CONTAINER>

hello-world のコンテナIDを指定して実行:

1
docker rm 0a1955e4785b

実行結果:

1
0a1955e4785b

hello-world のDockerコンテナが削除されたのを確認

1
docker ps -a

実行結果:

1
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

hello-world のDockerイメージを削除

1
docker rmi d2c94e258dcb

実行結果(例):

1
2
3
4
Untagged: hello-world:latest
Untagged: hello-world@sha256:a26bff933ddc26d5cdf7faa98b4ae1e3ec20c4985e6f87ac0973052224d24302
Deleted: sha256:d2c94e258dcb3c5ac2798d32e1249e42ef01cba4841c2234249495f87264ac5a
Deleted: sha256:ac28800ec8bb38d5c35b49d45a6ac4777544941199075dff8c4eb63e093aa81e

hello-world のDockerイメージが削除されたのを確認

1
docker images

実行結果:

1
REPOSITORY   TAG       IMAGE ID   CREATED   SIZE

Docker CE アンインストール

参考:Install Docker Engine on Ubuntu | Docker Docs # Uninstall Docker Engine


Docker関連のパッケージをアンインストール

1
sudo apt-get purge docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin docker-ce-rootless-extras

すべてのイメージ、コンテナ、ボリュームを削除

1
2
sudo rm -rf /var/lib/docker
sudo rm -rf /var/lib/containerd

関連記事

  1. Windows11 WSL Ubuntu VSCode Git GitHub 環境構築
  2. Windows11 に Docker Desktop for Windows をインストール