スタートアップCTOによるITエンジニアのためのブログ

WSL2のUbuntuへのDocker Engineインストール方法

本記事では、Windows Subsystem for Linux 2 (WSL2) 環境のUbuntuに、Docker Engineを直接インストールして設定する方法を解説します。Docker Desktopを使用しないため、リソース消費を抑えた軽量な開発環境を構築できます。

Docker Engineの概要

Docker Engineは、クライアント・サーバー構成で動作するコンテナ技術で、主に次の3つの要素で構成されています。

  • Docker Daemon (dockerd): サーバー側の本体。バックグラウンドで常駐し、イメージ、コンテナ、ネットワークなどの管理・実行を担います。
  • REST API: CLIとデーモン間で通信を行うためのインターフェース。
  • Docker CLI (docker): ユーザーが操作するコマンドラインツール。REST APIを通じて dockerd に命令を送ります。

WSL2でのDocker Engineアーキテクチャ

WSL2にDocker Engineをインストールすると、単一ディストリビューション内でデーモン、CLI、コンテナの動作が完結します。

  • Windows OS
    • WSL2軽量VM
      • ディストリビューション(Ubuntuなど)
        • Docker Daemon (dockerd)
        • Docker CLI (docker)
        • コンテナ1
        • コンテナ2
        • コンテナn
      • 別ディストリビューション

WSL2でDocker Engineを使うメリット

Docker DesktopではなくDocker Engine(Community Edition)を直接選ぶメリットは以下の通りです。

  • ライセンス制限の回避: 企業利用でも無償で利用可能です。
  • リソースの節約: Windows側のGUIアプリを介さないため、メモリやCPUの消費を大幅に抑えられます。
  • 本番環境に近い操作感: Linuxサーバーに直接インストールする場合とほぼ同じ構成になります。

前提とインストール前の準備

  • Windows 11 / 10 (WSL2が動作する環境)
  • WSL2にUbuntuディストリビューションがインストール済みであること
  • Docker Desktopがインストールされていない(または統合がオフである)こと

もしWSL2が未設定の場合、「WSL2のWindows11へのインストール、起動とシャットダウン」で詳しく解説しています。

既にDocker Desktopがある場合の対処

競合を防ぐため、Docker DesktopのWSL統合を無効化します。

  1. Docker Desktopアプリ上部の歯車アイコン(Settings)をクリックし、「Resources」メニューを選択。
  2. 「WSL integration」タブより、以下のチェックボックスをオフにする
    • Enable integration with my default WSL distro
    • Enable integration with additional distrosのUbuntu
  3. 「Apply & Restart」ボタンをクリック。
  4. WSLのUbuntu上で、docker --versionを実行し、コマンドが無効になっていることを確認。
Docker DesktopのWSL統合を無効化

インストール手順

systemdを有効化する

WSL2で systemctl を使うために、/etc/wsl.confという設定ファイルがUbuntu上に存在しsystemdが有効になっているか確認します。

# /etc/wsl.conf
[boot]
systemd=true

もし設定ファイルが存在しない場合は以下のコマンドで作成します。

sudo tee /etc/wsl.conf <<EOF
[boot]
systemd=true
EOF

設定を反映させるため、PowerShell等のWindowsターミナルからWSLを再起動してください。

wsl --shutdown

競合パッケージの削除

まず、古いバージョンや非公式のパッケージを削除します。

sudo apt remove $(dpkg --get-selections docker.io docker-compose docker-compose-v2 docker-doc podman-docker containerd runc | cut -f1)
  • 何もインストールされていなければ「dpkg: no packages found matching docker.io」のように表示されます。
  • これらのパッケージを削除しても、/var/lib/dockerに保存されている既存のイメージ、コンテナ、ボリューム、ネットワークは削除されませんので安心です。

Docker用aptレポジトリを設定

公式のGPG鍵とレポジトリを追加します。

# Docker公式GPG鍵を追加
sudo apt update
sudo apt install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
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

# レポジトリの登録 (DEB822形式)
sudo tee /etc/apt/sources.list.d/docker.sources <<EOF
Types: deb
URIs: https://download.docker.com/linux/ubuntu
Suites: $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}")
Components: stable
Architectures: $(dpkg --print-architecture)
Signed-By: /etc/apt/keyrings/docker.asc
EOF

sudo apt update

Docker Engineのインストール

最新のDocker Engine一式をインストールします。

sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
  • docker-ce: Docker Daemon(dockerd)を提供。
  • docker-ce-cli: Docker CLI (dockerコマンド)を提供。
  • containerd.io: コンテナの低レベルな実行を担うコンテナランタイム(containerdrunc)。
  • docker-buildx-plugin: docker buildxコマンドを使うためのプラグイン。Dockerイメージ作成(build)機能の強化版。
  • docker-compose-plugin: docker composeコマンドを使うためのプラグイン。複数コンテナを一括で定義・実行可能。

動作確認

systemdが動作していれば、インストール直後にサービスが起動しています。

sudo systemctl status docker
# 実行されていない場合は sudo systemctl start docker

次に、テスト用のコンテナを実行します。

sudo docker run hello-world

「Hello from Docker!」と表示されればインストール成功です。

sudoなしでdockerコマンドを実行する

毎回 sudo を付ける手間を省くため、現在のユーザーを docker グループに追加します。

sudo usermod -aG docker $USER

設定を反映させるため、一度WSLをログアウトして再ログインするか、以下のコマンドを実行します。

newgrp docker

これで、docker ps などのコマンドが直接実行できるようになります。

まとめ

WSL2のUbuntuに直接Docker Engineを導入することで、開発環境のパフォーマンスが向上し、Linuxサーバーに近い感覚でコンテナを扱えるようになります。ぜひこの軽量な環境を体験してみてください。