いしぐめも

プログラミングとかしたことを書きます。

Docker DesktopをアンインストールしてもVSCodeでRemote Containersしたい!(Windows10 + Remote Docker host)

Dockerクライアントを使いたいがためにDocker Desktopを入れていたのですが、今回それが使えなくなって困ったので対処したメモ。

背景

困窮した背景を書きます。

開発環境の構築にDocker使ってます

Personiumの開発ではよくVSCode + Dockerを使って開発します(私は)。以前もこんな記事を書きました。

yoh1496.hatenablog.com

リモートのDockerホストにつないでいた

記事では言及していませんが、実際の開発ではメモリを多めに積んだUbuntuVMにDockerのホストをやらせていて、 手元のマシンではそこのホストに繋ぐだけ。手元ではデーモンは動かさないという方法を取っていました。

なのでまぁ、WindowsにDocker Desktopをインストールしてはいても、肝心なデーモン部分は使用しておらず、 Docker DesktopのGUIもあんまり触ったことないです。(なので恩恵がわからない・・・)

対処法: VSCode から WSL上の docker-ce-cli を使用する

(追記)

もはやこれ以降に書いてある内容をやる必要もなくなりました。最近のRemote ContainersはSSH経由でサーバー側のdockerを使用できるようになっています。詳細は以下に書きました。

yoh1496.hatenablog.com

(追記ここまで)

Windows用にはdockerクライアント単体のバイナリは配布されていない(2022年2月現在、わたし調べ)ので、Linux版を使用します。

公式ではありませんが、chocolateyでWindows環境に導入できるdocker-cliを提供している人がいました。↓

Chocolatey Software | Docker CLI 20.10.17

というわけで、Windows版のバイナリをビルドしている人もいるんですが、今回はそれを使わずにLinux版を使用してみたいと思います。

使用するにあたっては、実はVSCode の Remote-Containers 拡張はWSLのdockerを使用させることもできるので、それを利用していきます。 (WSL2のUbuntu上でVSCode使うという力技も考えましたがw)

手順

手順といっても Docker 公式の手順に従ってやるだけです。WSLでしか動作確認していませんが、WSL2でも同様なことができると思います。

docker-ce-cli の導入

こちらの手順に従って導入していきます。WSL2にdockerのデーモン自体を導入することもできるんですが、自分の環境では不要なのでインストールしていません。

docs.docker.com

docker-compose の導入

docker-compose もセットで使っているので、これも導入します。

docs.docker.com

VSCodeからWSL側のdockerを使うように設定する

以下のようにVSCodeの設定から Remote-Containers 拡張がWSLのdockerクライアントを使用するように設定します。

Remote Containers の Execute In WSL オプション

こうすることで、dockerもdocker-composeもWSL側のものを使用させるようにすることができました。

なお、WSLローカルのdockerデーモンを使用しない場合はリモートのdockerホストを使用するように設定します。これはVSCodeのRemote Containers拡張の docker.host で指定するのが便利です。

docker.host設定

ここに ssh://tcp:// でリモートのマシンを指定してあげれば リモートのマシンでコンテナを立ち上げて、そのコンテナに入る ということが可能になります。

終わりに

というわけで、タイトルの「Docker DesktopをアンインストールしてもVSCodeでRemote Containersしたい!」を実現しました。

自分の環境ではWSL2ではない方のWSLを使用しているので、WSL特有のネットワークの遅さが何らかの問題を起こすかは今後様子見してやっていきたいと思います。ビルドする際のコンテキストの転送に時間がかかったりするようになるんですかねー

chocolateyでも非公式ながらパッケージが配布されているのが興味深いですね。docker-composeとかも同様に動かせるのでしょうか。今後試してみたいと思います。