Docker Desktop for Windows 無しで Docker を使う
Docker Desktop は特に Windows 上で簡単に Docker 環境を用意できる素晴らしいツールです。
そんな Docker Desktop は最近になって subscription の仕組みが変わり、大きめの企業では有償プランへの移行の検討が必要となりました。
個人向けでは今後も無料ですが、そんな Docker Desktop (for Windows) の代替として、 WSL 上の Ubuntu で Docker daemon を動かし、それを Windows 上の Docker CLI から操作するという方法が紹介されていました。
この方法であれば Visual Studio Code の拡張機能である Remote Container も利用できるので非常に便利です。
この記事は、そんな Docker daemon on WSL を Windows から動かす方法の設定メモです。
注意事項
この方法は Docker on Ubuntu 20.04 on WSL 2 を利用します。
他の用途のために Ubuntu on WSL を利用しても良いですが、避けたほうが良いかもしれません。
また他の WSL で提供されているディストリビューションを利用して、同様のことを実現できるかもしれません。
やりかた
Docker on Ubuntu on WSL を準備する
WSL 2 の公式ドキュメントと Docker の公式ドキュメントを見るなりして、 Ubuntu on WSL に Docker をインストールしておきましょう。
ちなみに WSL のデフォルトユーザを root に設定しておくとパーミッションに悩まされずに済むかもしれないです。
Windows に Docker CLI を導入する
Docker daemon on Ubuntu on WSL を Windows から操作するための Docker CLI を用意しましょう。
有志が Windows 用にビルドした Docker CLI が GitHub で公開されているのでこれをダウンロードし、C:\bin\
など適当なディレクトリに置いてパスを通します*1。
Docker daemon を動かす
Windows から見てリモートの Docker daemon を操作できるようにするため、以下のことが必要です。
- Ubuntu on WSL の IP アドレスを取得しておく
- Docker CLI で動かすホストを指定するために環境変数
DOCKER_HOST
を設定する - Ubuntu on WSL で Docker daemon を動かす
これを実行するための PowerShell スクリプトが以下です。
$ip = $(wsl -e sh -c "ip -4 addr show dev eth0 | grep -Po 'inet \K[\d.]+'") [System.Environment]::SetEnvironmentVariable("DOCKER_HOST", "tcp://$($ip):2375", "User") wsl -d Ubuntu-20.04 -e sh -c "dockerd --tls=false --host=$ip" [System.Environment]::SetEnvironmentVariable("DOCKER_HOST", "", "User")
ps1 ファイルとして保存して右クリックから実行しましょう。 Docker daemon を終了したい場合には Ctrl + C で停止できます。
以上で準備は完了です。
Windows から Docker を動かしてみる
既に Windows 上のコマンドプロンプトなどから普通に Docker が利用できるようになっているはずです。
docker run --rm hello-world
などを実行して動作確認をしておきましょう。
また Visual Studio Code の拡張機能である Remote Container も利用できるようになっているはずです。
*1:この Docker CLI は Chocolatey 上でも提供されています。