メモをします
とりあえず docker compose が使えればそれでいいというスタンスで書きます
例に倣って随時更新予定です
目次
Docker Desktop を入れます
【Attention】もしあなたが 250 人以上の従業員を抱える場合、Docker Desktop は有料になります。
Docker Desktop license agreement | Docker Docs
金が有り余っていてかすり傷にもならない場合、もしくは少人数, 個人開発の場合のみこれを導入します。それが嫌な場合、次の 「Docker Engine を入れます」 に行きます。
Docker (Engine) はもともと Linux で動くものなので、Docker Desktop を使わずに docker compose などは動かすことはできますが、plain な Windows や Mac ではできません。本来 Linux 用である Docker Engine を Windows や Mac で使えるようにする窓口のようなものが Docker Desktop ということなんですね。
sudo apt install gnome-terminal
docs.docker.com
↑ ここにある .deb を拾ってきます
sudo apt-get update sudo apt-get install ./docker-desktop-4.30.0-amd64.deb # バージョンによって変わります
Docker Engine を入れます
docs.docker.com
↑ これに従います
# Add Docker's official GPG key: sudo apt-get update sudo apt-get 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 # Add the repository to Apt sources: 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 sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
sudo docker run hello-world
sudo なしで実行できるようにします
docs.docker.com
↑ これに従います
sudo groupadd docker # already exists でした sudo usermod -aG docker $USER
ログアウトして再度戻ります
docker run hello-world
同一 LAN 内の別端末から WSL 上の docker サービスに接続できるようにします
WSL2 で開発中のサービスを同じ LAN 内のスマホなどから見たくなったりします。そのための設定です
ここでは Windows PC のローカル IP アドレスが 192.168.1.123 などと固定されているものとして話を進めます

図は必ずしも正確とは限りません
Ubuntu と docker compose コンテナの間の port mapping を行います
ここでは docker-compose.yaml 等で ports: "3000:3000" 等と設定が済んでいることを想定します, as below:
services: service_name: ports: - "3000:3000"
Windows さんが Port forwarding してくれるようにします
WSL2 と外部端末の間には Windows さんが挟まっているため、Windows さんがポートを受け入れてそれを WSL に送るようにしないといけません
その辺の管理をするのが netsh です
learn.microsoft.com
Create/Update
PowerShell を管理者として開いて次のように打ちます
netsh interface portproxy add v4tov4 listenport=<Windows 側のポート番号> listenaddress=<Windows 側の IP アドレス> connectport=<WSL 側のポート番号> connectaddress=<WSL 側の IP アドレス>
WSL の IP アドレスは
ip addr show eth0 | grep inet | awk '{print $2}' | cut -d/ -f1
で分かります
Delete
個別に削除するには istenport と listenaddress の指定が必要で
netsh interface delete v4tov4 listenport=<Windows 側のポート番号> listenaddress=<Windows 側の IP アドレス>
あるいは一括で
netsh interface portproxy reset