初めに
いつも見ていただきありがとうございます。ライセンスやマシンリソースの関係で、シンプルに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 $USER
や id -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
イメージ
docker images
チュートリアルでTAGをつけたため、「docker101tutorial」は2つのエントリを持つが、ImageIDは同一。
不要になったコンテナの削除
停止ー>削除する。見えていないNetwork関連のリソースまで含めて削除するには、以下のようにする。
プロセス削除
# ContainerIDを取得
docker ps -a
# 上記のIDを利用して停止、削除
docker rm -f {{上記出力のcontainer-id-1}} {{上記出力のcontainer-id-2}}
# または、名前でもよい
docker rm -f docker101tutorial repo
# 確認
docker ps -a
コンテナイメージ削除
# ImageIDを取得
docker images
# IDを指定して削除
docker rmi {{上記出力のimage-id-1}} {{上記出力のimage-id-2}}
# ImageIDを取得
docker images
# 強制して、IDを指定して削除
docker rmi {{上記出力のimage-id-1}} {{上記出力のimage-id-2}} -f
その他のリソース
docker system prume
Windowsのタスクトレイには何も表示されない
Dockerは、WSL2のUbuntuの中で動いているので、Windowsのタスクトレイには表示されない。
シンプルに Docker を動かせた!
親記事:WSL2とVSCで作るWindowsでのDocker内開発環境(2021年睦月)
参考記事:
- docker in WSL2
- systemd
- Docker VSCode ssh接続