以下の内容はhttps://bakkyalo.hatenablog.jp/entry/2024/10/11/014856より取得しました。


Docker のメモ

メモをします

とりあえず docker compose が使えればそれでいいというスタンスで書きます
例に倣って随時更新予定です

環境

  • Windows11 Pro
  • WSL2 (Ubuntu 22.04 LTS)

Ubuntu の方に入れます

docs.docker.jp
↑ こういうのがあるらしいですが無視します

Docker Desktop を入れます

【Attention】もしあなたが 250 人以上の従業員を抱える場合、Docker Desktop は有料になります。
Docker Desktop license agreement | Docker Docs
金が有り余っていてかすり傷にもならない場合、もしくは少人数, 個人開発の場合のみこれを導入します。それが嫌な場合、次の 「Docker Engine を入れます」 に行きます。
Docker (Engine) はもともと Linux で動くものなので、Docker Desktop を使わずに docker compose などは動かすことはできますが、plain な WindowsMac ではできません。本来 Linux 用である Docker Engine を WindowsMac で使えるようにする窓口のようなものが 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

お勉強

docs.docker.com

↑ これを勉強します

VSCode

Dev Containers 拡張機能を入れます

marketplace.visualstudio.com

同一 LAN 内の別端末から WSL 上の docker サービスに接続できるようにします

WSL2 で開発中のサービスを同じ LAN 内のスマホなどから見たくなったりします。そのための設定です

ここでは Windows PC のローカル IP アドレスが 192.168.1.123 などと固定されているものとして話を進めます

やりたいことのイメージ図
図は必ずしも正確とは限りません



Ubuntu と docker compose コンテナの間の port mapping を行います

docs.docker.com


ここでは docker-compose.yaml 等で ports: "3000:3000" 等と設定が済んでいることを想定します, as below:

docker-compose.yaml

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

で分かります

Read

確認は

netsh interface portproxy show v4tov4
netsh interface portproxy show all

などでできます

Delete

個別に削除するには istenportlistenaddress の指定が必要で

netsh interface delete v4tov4 listenport=<Windows 側のポート番号> listenaddress=<Windows 側の IP アドレス>

あるいは一括で

netsh interface portproxy reset

Windows ファイアウォールを解除します

恐らくこれだけでは Local LAN 内でも別の端末 (Android, etc.) からは繋がらないと思います
これは Windows Firewall が標準でブロックしているからです

そこで Local network に対してポートを開けるよう設定します

CUI での説明は ↓ にあります
zenn.dev

GUI での説明は ↓ 等で見つかります
zenn.dev


検証が終わったら念のためポートを閉じておきます


文献





以上の内容はhttps://bakkyalo.hatenablog.jp/entry/2024/10/11/014856より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14