Docker Desktopはライセンス問題があり、利用しづらくなりそうなので、Docker Desktopを使わずに開発できるようにしたいです。Windowsを使っていると、Docker DesktopはWSL2がバックエンドになっており、DockerデーモンはWSL2で稼働していますので、Docker Desktopを使わずにVSCodeから利用できるようにします。
Docker Daemonの設定
WSL2で動かしているUbuntuへのDockerの導入は以下を参照。
https://docs.docker.com/engine/install/ubuntu/
デフォルトではdocker.sockのUNIXソケットだけをListenしているのでTCPでもListenするように設定します。設定したらservice
で再起動して反映します。本当はtls
は有効化したほうがいいんでしょうけれど簡単にするためにfalse
にしておきます。
/etc/docker/daemon.json
{
"debug": false,
"tls": false,
"hosts": ["tcp://127.0.0.1:2375", "unix:///var/run/docker.sock"]
}
Docker CLIの入手
ビルドされたものがあるようなので、ありがたく使います。
https://github.com/StefanScherer/docker-cli-builder
Docker CLIの設定
PowerShellで実行できることを確認してみます。
# Docker DaemonがListenしている、2375ポートがつながるか確認してみます
Test-NetConnection -ComputerName localhost -Port 2375
# つながりそうならdocker contextを作ります
docker context create remote --docker 'host=tcp://localhost:2375'
docker context use remote
# ClientとServerの情報が両方出てきたらOKです
docker version
devcontainer
VSCodeに与える.devcontainer/devcontainer.json
の例は以下の通りです。
-
dockerFile
で使うイメージをビルドするためのDockerfile
を指定します。image
で使いたいイメージを指定してもよいようです -
extensions
で使いたいVSCode拡張機能を指定します。 -
workspaceMount
でコンテナにマウントしたいディレクトリを指定します。絶対パスでないといけない、かつ、WSL2からアクセス可能なパスでないとエラーが起きてしまいました。Docker Desktopならこうはならないようで、気持ち悪いですが諦めます。
{
"name": "my_python_container",
"dockerFile": "Dockerfile",
"settings": {
"python.pythonPath": "/usr/bin/python3"
},
"extensions": [
"ms-python.python"
],
"workspaceMount": "source=/mnt/c/mydir/workspace,target=/workspace,type=bind,consistency=delegated",
"workspaceFolder": "/workspace"
}