普段は podman を使っていましたが、一部 docker にしか対応していないツールが使えず不便なので、Docker 素人ながら Docker Desktop for Windows を使わずに Windows で docker を使う手順のメモ。
ゴール
WLSに docker を入れて、Windows から使えるようにします。
ツールだけが docker を使うため、Windows で docker CLI はインストールしません。
WLS に docker を入れる
これは、やり方が変わりそうなので、最新の情報をググってください。需要もあるのでたくさん見つかると思います。
大まかな流れは以下です。
- WLS に Ubuntu を入れます。
- docker をインストールします。
これで、この Ubuntu 上では Unix domain socket を使って docker が使えるようになります。
IntelliJ IDEA からは Docker Connection
で WSL というのを選ぶと、なぜかここまでで使えるようになります。なぜなのか分からないので、詳しい人教えてください。
Windows から接続できるようにする。
手順は以下の 2 つです。
- docker が TCP でも待ち受けるようにする
- Windows の環境設定をする
docker が TCP でも待ち受けるようにする
docker は実行するスクリプトと設定用のファイルがあります。
実行するスクリプトは/etc/init.d/docker
で、設定用のファイルは/etc/default/docker
です。
今回は、設定用のファイルにオプションを追加します。
まず、WSL 上にインストールしている docker cli が必要としているエンドポイントを調べます。
> docker context ls NAME DESCRIPTION DOCKER ENDPOINT ERROR default * Current DOCKER_HOST based configuration unix:///var/run/docker.sock
エンドポイントは unix:///var/run/docker.sock
でした。
今回は、追加で TCP の 2375 番ポートで受け付けるようにします。これは tcp://0.0.0.0:2375
になります。
それでは、設定用のファイルの/etc/default/docker
に記載しましょう。
DOCKER_OPTS
という環境変数に、それぞれを-H
のあとに記載します。
DOCKER_OPTS="-H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock"
できたら docker を再起動しましょう。
service docker restart
あとは、netstat
などで 2375 ポートで待ち受けしているのを確認しましょう。実行後しばらくすると待ち受け始めます。
netstat -tln | grep 2375 tcp6 0 0 :::2375 :::* LISTEN
何も表示されなければ待ち受けてません。上記のように1行出力されれば待ち受けしてます。 私の環境では、起動してから20秒ぐらいで待ち受けました。
Windows の環境設定をする
WLS の IP アドレスを取得します。
ip addr show eth0 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000 link/ether 00:15:5d:19:a0:27 brd ff:ff:ff:ff:ff:ff inet 172.26.130.33/20 brd 172.26.143.255 scope global eth0 valid_lft forever preferred_lft forever inet6 fe80::215:5dff:fe19:a027/64 scope link valid_lft forever preferred_lft forever
WSL の IP アドレスは 172.26.130.33
です。
Dockerの設定には、WSL の IP アドレスと docker が待ち受けているポート番号である 2375
を使用します。
各種ツールで tcp://172.26.130.33:2375
を設定すると docker に接続できるようになります。
環境変数に設定する場合は、 DOCKER_HOST
に tcp://172.26.130.33:2375
を設定します。