#chiroito ’s blog

Java を中心とした趣味の技術について

Windows に Docker 環境を構築したメモ

普段は 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_HOSTtcp://172.26.130.33:2375 を設定します。