1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Docker for Windows on WSL2 (2025年皐月) DockerDesktop,RancherDesktopを使わないシンプル構成

Last updated at Posted at 2025-05-29

初めに

いつも見ていただきありがとうございます。ライセンスやマシンリソースの関係で、シンプルにDockerを導入します。以下のものは使用しません。

  • Docker Desktop
  • Rancher Desktop

インストール

0)過去の残骸を除去
1)WSLのbash内にdockerを導入
2)scoopでdocker CLI を導入
3)CLIからbash(Ubuntu)内のDockerプロセスへの通信経路を定義

0)過去の残骸を除去

以前導入した、「Docker Desktop」や「Rancher Desktop」がある場合は、それをきれいに削除しておく。

WSLに残っている不要なDistoを削除

wsl.exe -l -v

  NAME                    STATE           VERSION
* Ubuntu                  Running         2
  rancher-desktop         Stopped         2
  rancher-desktop-data    Stopped         2

上記では、rancher-desktopに関連した2つのDistroが残っているので、以下のようにして削除する。

wsl --unregister rancher-desktop

登録解除。
この操作を正しく終了しました。
wsl --unregister rancher-desktop-data

登録解除。
この操作を正しく終了しました。

WSLのbash環境(デフォルトではUbuntu)に入って以下を実施する。

# 古いDockerが入っているかもしれないのでアンインストール
sudo apt-get purge docker docker-engine docker.io containerd runc
sudo apt-get purge docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin docker-ce-rootless-extras

# 過去の残骸を除去
rm -rf ~/.docker
sudo rm -rf /var/lib/docker
sudo rm -rf /var/lib/containerd

1)WSLのbash内にdockerを導入

# 以下のスクリプトで、Dockerに必要なパッケージとリポジトリが追加され、インストールされる
# Install Docker, you can ignore the warning from Docker about using WSL
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh # --dry-run
rm get-docker.sh

# OSの設定次第では以下のコマンドで正規リポジトリからのインストールも可能
# sudo -s
# apt-get update -qq >/dev/null
# 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

# Dockerグループに参加
# Add your user to the Docker group
sudo usermod -aG docker $USER

# Sanity check that both tools were installed successfully
docker --version
docker compose version
service docker status

# OSのバージョンによっては以下のコマンドを追加で実施(iptablesコマンドの設定)
# Using Ubuntu 22.04 or Debian 10+? You need to do 1 extra step for iptables
# compatibility, you'll want to choose option (1) to use iptables-legacy from
# the prompt that'll come up when running the command below.
#
# You'll likely need to reboot Windows or at least restart WSL after applying
# this, otherwise networking inside of your containers won't work.
[[ $(echo $(lsb_release -rs) | awk '{print ($1 >= 22.04)}') -eq 0 ]] && sudo update-alternatives --config iptables

自動起動設定

バージョン0.67.6以降のWSLを使っている場合、systemdを使って「Dockerサービス」の自動起動を指定できる。この指定があると、ssh-serverなど他のサービスも自動起動させることができる。

vi /etc/wsl.conf

# 以下の設定を追加
[boot]
systemd=true

WSLを再起動する。

# WSL終了
wsl.exe --shutdown

# WSL再開
bash

bash内で動作確認

systemctl status docker

# 以下は出力例
● docker.service - Docker Application Container Engine
     Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
     Active: active (running) since Thu 2025-05-29 19:35:45 JST; 48min ago
TriggeredBy: ● docker.socket
       Docs: https://docs.docker.com
   Main PID: 464 (dockerd)
      Tasks: 36
     Memory: 108.0M
        CPU: 2.586s
     CGroup: /system.slice/docker.service
             ├─464 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
             ├─973 /usr/bin/docker-proxy -proto tcp -host-ip 0.0.0.0 -host-port 13306 -container-ip 172.26.0.2 -contain>
             └─980 /usr/bin/docker-proxy -proto tcp -host-ip :: -host-port 13306 -container-ip 172.26.0.2 -container-po>

2)scoopでdocker CLI を導入

VSCodeからDockerを使うときに、CLIがあること前提となるため、docker CLIのみをWindows側にインストールする。

scoopの古いキャッシュやバージョンを削除

scoop cache rm *
scoop cleanup *

インストール

scoop install docker

3)CLIからbash(Ubuntu)内のDockerプロセスへの通信経路を定義

bash(Ubuntu)へ公開鍵でパスワード無しでSSHできるようにする

bash(Ubuntu)側でSSHサーバを起動

# install
sudo apt-get install ssh
# sshd_configを変更し、PubkeyAuthentication を有効化
sudo vi /etc/ssh/sshd_config

# 以下の定義を見つけて「yes」にする
PubkeyAuthentication yes

キーを作成して設置

以下の、{{windosのユーザ名}} はWindowsでのユーザディレクトリの途中に出てくる名称で通常はユーザ名と同一。 cmd.exeにて、echo %USERPROFILE% を入力した時に表示されるものを指定する。なお、powershell の場合は、 echo $env:USERPROFILE

# create & set ssh-keys
mkdir -p $HOME/.ssh/
cd $HOME/.ssh/
# wsl2_ubuntuでキー作成、パスフレーズは空
ssh-keygen -t ed25519 -f wsl2_ubuntu -C ""
# 公開鍵を名称変更してコピー、秘密鍵をWindows側にコピー
cp -p wsl2_ubuntu.pub authorized_keys
# 以下のWindowsユーザディレクトリが存在していない場合は、mkdir しておくこと
cp ./wsl2_ubuntu /mnt/c/Users/{{windosのユーザ名}}/.ssh/
# パーミッションを変更(鍵による接続のためには必須)
chmod 0700 .
chmod 0700 ./authorized_keys
# サービス再起動
sudo systemctl enable ssh
sudo systemctl restart ssh
sudo systemctl status ssh

Windows側で公開鍵によるSSH接続の設定をする

以下の {{WSLでのユーザ}} は、bashに入った時のユーザ名で、echo $USERid -un で表示されるもの。

# Windows pwsh にて
cd $env:Userprofile\.ssh
notepad config
# 以下の内容を追加
## Docker
Host wsl
    HostName localhost
    IdentityFile ~/.ssh/wsl2_ubuntu
    User {{WSLでのユーザ}}
    TCPKeepAlive yes

Dockerの接続先をSSH経由に指定する

Windowsから、ssh wsl にて公開鍵認証ログインできることを確認

# 「wsl」は、上記 config で定義した「Host」名
ssh wsl

もし、接続不可の場合は、localhostを別のものに変えて接続します。ubuntuのip aで見えているIP(loやdockerX以外)に対してsshをかけてみてください。
以下の状態だと、ssh 172.26.209.224となります。

# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet 10.255.255.254/32 brd 10.255.255.254 scope global lo
    . . . . .

2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:15:5d:78:1f:73 brd ff:ff:ff:ff:ff:ff
    inet 172.26.209.224/20 brd 172.26.223.255 scope global eth0
    . . . . .

3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default
    inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
    . . . . .

Windows側から使う場合のDocker接続設定をする

docker context list
docker context create wsl --docker "host=ssh://wsl"
# wsl
# Successfully created context "wsl"
docker context use wsl
# wsl
# Current context is now "wsl"

Windows側からの動作確認

# Docker動作確認
docker info
docker ps -a

これで、WindowsのCLIからdockerが使用可能となった。

CLIで確認

コンテナプロセス

# 起動中コンテナのみ
docker ps
# 停止も含めてすべて
docker ps --all

image.png
image.png

イメージ

docker images

チュートリアルでTAGをつけたため、「docker101tutorial」は2つのエントリを持つが、ImageIDは同一。
image.png

不要になったコンテナの削除

停止ー>削除する。見えていないNetwork関連のリソースまで含めて削除するには、以下のようにする。

プロセス削除

# ContainerIDを取得
docker ps -a
# 上記のIDを利用して停止、削除
docker rm -f {{上記出力のcontainer-id-1}} {{上記出力のcontainer-id-2}}
# または、名前でもよい
docker rm -f docker101tutorial repo
# 確認
docker ps -a

image.png

コンテナイメージ削除

# ImageIDを取得
docker images
# IDを指定して削除
docker rmi {{上記出力のimage-id-1}} {{上記出力のimage-id-2}}

image.png
あ!!、2つエントリを持つので強制しないとだめだ。

# ImageIDを取得
docker images
# 強制して、IDを指定して削除
docker rmi {{上記出力のimage-id-1}} {{上記出力のimage-id-2}} -f

1つは削除済みだったので、エラーがでたけど無視。
image.png

その他のリソース

docker system prume

消しまくるので、十分に注意して実施する。
image.png

Windowsのタスクトレイには何も表示されない

Dockerは、WSL2のUbuntuの中で動いているので、Windowsのタスクトレイには表示されない。

シンプルに Docker を動かせた!

親記事:WSL2とVSCで作るWindowsでのDocker内開発環境(2021年睦月)

参考記事:

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?