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

WSL2環境でのDocker Desktopのインストール、設定、基本操作とアーキテクチャ

本記事では、WSL2(Windows Subsystem for Linux 2)がインストールされたWindows 11に、Docker DesktopをインストールしてWSL2との連携を設定する方法を解説します。

また、GUIとCLI両方におけるDockerの基本操作や、WSL2特有のDocker Desktopアーキテクチャについても紹介します。

前提条件

  • Windows11
  • WSL2でデフォルトのUbuntuディストリビューションをインストール済み。

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

Docker Desktopのインストールと設定

Windows版Docker DesktopをDocker公式サイトからダウンロードします。

インストーラを起動し、Configuration画面で「OK」をクリック。

Docker DesktopインストーラConfiguration

インストールが開始されます。

Docker DesktopインストーラUnpacking files

インストール完了後、「Close and restart」ボタンをクリックしてWindowsを再起動します。

Docker Desktopインストール後の再起動

PC再起動後、Docker Desktopが自動で起動します。利用規約(Service Agreement)が表示されるので「Accept」をクリックします。

Docker Desktop利用規約同意

Dockerアカウント作成・ログイン画面が表示されますが、必須ではないので「Skip」ボタンをクリックします。

 Docker Desktopのコンテナ管理画面が表示されたらインストール成功です。

WSL2との連携設定

Docker Desktopの右上にある歯車アイコン(Settings)をクリックし、「General」メニューを選択します。画面をスクロールして「Use the WSL 2 based engine」がオンになっているか確認します。この設定により、従来のHyper-Vによる重厚な仮想マシンではなく、WSL2の軽量なLinuxカーネル上でコンテナが動作するようになります。もしオフならチェックして「Apply」ボタンをクリックします。

Docker Desktop Use the WSL 2 based engine setting

次に、同じSettingsで「Resources」メニューより「WSL連携」タブをクリックし、「Enable integration with my default WSL destro」がオンになっていることを確認します。オフになっている場合は、チェックして「Apply」ボタンをクリックします。

これで、WSL2のデフォルトディストリビューション内からdockerコマンドが使えるようになります。

デフォルトディストリビューションはPowerShellでwsl -l -vコマンドを実行して「*」が表示されているディストリビューションです。

wslデフォルトディストリビューション

もしデフォルト以外のディストリビューション(archlinuxなど)で個別に有効にしたい場合は、下のリストにあるスイッチをオンにします。

動作確認

PowerShellまたはWSL2(Ubuntu)を開き、以下のコマンドを入力してください。

docker --version
# 出力例: Docker version 29.3.1, build c2be9cc

試しにテスト用のコンテナを実行してみます。

docker run hello-world

イメージがダウンロードされ、「Hello from Docker!」と表示されれば成功です。

WSL2でのDocker Desktop基本操作

Docker Desktopの強みは、CLI(PowerShell/WSL上のBash)とGUI(Docker Desktop画面)どちらからでもDockerの操作が可能な点にあります。

イメージ一覧表示

  • CLI: docker images
  • GUI: Imagesメニューをクリック。
Docker Desktop Imagesメニュー

イメージから新規コンテナ生成・実行

  • CLI: docker run <イメージ名>
  • GUI: Imagesメニューから、コンテナ作成元イメージの「Run」ボタンをクリック。
Docker Desktopイメージからコンテナ作成・実行

イメージ削除

  • CLI: docker rmi <イメージID>
  • GUI: Imagesメニューから、削除したいイメージのゴミ箱アイコンをクリック。
Docker Desktopイメージ削除

コンテナ一覧表示

  • CLI: docker ps -a
  • GUI: Containersメニューをクリック。
Docker Desktop Containersメニュー

既存コンテナ再起動

  • CLI: docker start <コンテナID>
  • GUI: Containersメニューから「Start」ボタンをクリック。
Docker Desktop start container

コンテナ停止

  • CLI: docker stop <コンテナID>
  • GUI: Containersメニューから実行中コンテナの「Stop」ストップボタンをクリック。
Docker Desktop stop container

コンテナ削除

  • CLI: docker rm <コンテナID>
  • GUI: Containersメニューから削除したいコンテナのゴミ箱アイコンをクリック。
Docker Desktop Delete container

ボリューム作成

  • CLI: docker volume create <volume名>
  • GUI: Volumesメニューから「Create a volume」をクリック。
Docker Desktop create volume

ボリューム一覧

  • CLI: docker volume ls
  • GUI: Volumesメニューをクリック。
Docker Desktop Volumesメニュー

ボリューム削除

  • CLI: docker volume rm <ボリューム名>
  • GUI: Volumesメニューから削除したいボリュームのゴミ箱アイコンをクリック。
Docker Desktop delete volume

Docker Desktopのアーキテクチャ

WSL2環境のDocker Desktopは、クライアントとサーバが別々のWSLディストリビューションで実行されるという、少しユニークな「クライアント・サーバ」構成をとっています。

Docker Desktopをインストールすると、WSL上にdocker-desktopという特殊なディストリビューションが自動作成されます。

私たちが普段使うUbuntuなどのディストリビューションには、Dockerの「本体」は入っていません。そこにあるのは操作用のクライアント(CLI)だけで、命令を送るとdocker-desktop内のエンジンが実務をこなす仕組みになっています。

役割WSLディストリビューションインストールツール
クライアント通常のWSLディストリビューションdocker cli (コマンドライン)
サーバdocker-desktopdockerd, containerd

Docker Desktopアーキテクチャ図:

  • Windowsホスト
    • WSL2仮想マシン
      • docker-desktopディストリビューション
        • コンテナ1
        • コンテナ2
        • コンテナn
      • Ubuntuディストリビューション
      • 別ディストリビューション

アーキテクチャ検証

Docker Desktopのアーキテクチャを実際に検証するため、持続的に動作するnginxコンテナをインストールしてみます。

Docker Hubメニューで「nginx」を検索し、Official buildをクリックします。

Docker Desktop Docker Hubメニュー

nginxの詳細ページで「Run」ボタンをクリックすると、nginxイメージがダウンロードされコンテナが起動します。

Docker Hub Run nginx

PowerShellで以下のコマンドを実行すると、nginxコンテナが実行中であることがわかります。

docker ps

このコンテナが実行されているディストリビューションを調べるため、PowerShellでディストリビューション一覧を表示します。

wsl -l -v

デフォルトディストリビューションのUbuntuと共にdocker-desktopというディストリビューションが実行されていることがわかります。

WSL2 docker-desktop distribution

次に、無理やりdocker-desktopディストリビューションの中に入って、プロセスを確認してみます。

wsl -d docker-desktop

以下のコマンドを実行すると、docker-desktop上でDockerのデーモン(dockerd、containerd)や、nginxコンテナプロセスが実行されていることを確認できます。

ps aux | grep -E 'nginx|dockerd|containerd'
dockered, containerd, nginx processes

別ディストリビューションからの共有

このアーキテクチャの最大のメリットは、複数のLinuxディストリビューションから同じDocker環境を共有できることです。

例えば、新しくArch Linuxをインストールしても、Settingsの「WSL integration」でArch Linuxをオンにするだけで、Ubuntuで作成したコンテナやイメージにArch Linux側からもそのままアクセスできるようになります。

検証のため、archlinuxをインストールします。

wsl --install -d archlinux

Settings -> Resources -> WSL integrationタブの「Enable integration with additional distros」セクションでarchlinuxのチェックボックスをOnにし「Apply」ボタンをクリックします。これで、archlinux上でdockerコマンドが使えるようになります。

archlinuxにログインします。

wsl -d archlinux

docker psコマンドを実行すると、nginxコンテナが表示されます。

docker ps

まとめ

WSL2環境でのDocker Desktopには、以下のメリットがあります。

  • 導入が簡単: 複雑なLinux側の設定なしで、インストーラだけで環境が整う。
  • 柔軟な操作: GUIで全体の状況を把握し、CLIで細かな作業を行うといった使い分けができる。
  • リソースの効率化: WSLディストリビューション間でコンテナが共有できる。

まずはGUIでコンテナの動きを眺めつつ、徐々にCLI操作に慣れていくのが、Docker習得への近道です。ぜひこの便利な環境を使いこなしてください!