みーのぺーじ

みーが趣味でやっているPCやソフトウェアについて.Python, Javascript, Processing, Unityなど.

Visual Studio Code Remote - Containers はウインドウを閉じるとコンテナも止まる

Visual Studio Code Remote - Containers拡張機能を使用して開発環境を整えると,Docker Engineで開発用のコンテナが実行されます.docker-compose.ymlを使用すると,複数の別のコンテナが実行されます.

https://code.visualstudio.com/docs/remote/containers

動作を確認するために,pysampleというプロジェクトを用意して,postgresコンテナを実行しながらpythonの開発環境を開始するdocker-compose.ymlを使用してみました.この時実行されたコンテナは以下の通りでした.

$ docker  ps
CONTAINER ID IMAGE
0a3fe1607fff postgres:12
8a36d222122d pysample_devcontainer_workspace
1e303cdd7e15 vsc-volume-bootstrap

確かに,postgresコンテナと開発コンテナが実行されています.vsc-volume-bootstrapというイメージが気になりますが一旦無視します.

この状態で,Visual Studio Codeのウインドウを閉じてから,同じコマンドを実行しました.

$ docker  ps
CONTAINER ID IMAGE
1e303cdd7e15 vsc-volume-bootstrap

どうやら自動的にpostgresコンテナと開発用コンテナは停止されるみたいです.当たり前ですが,メモリ使用量も3GBから300MBに減っていました.

推測ですが,Visual Studio Code Remote - Containers 拡張機能は,Docker Engineで実行されているvsc-volume-bootstrapという名前のイメージのコンテナと通信して,開発コンテナの実行と終了を操作しているように思われます.

なお,docker ps -aを実行して確認したところ,開発コンテナの状態はExitedとなっていましたので,Visual Studio Codeを再度開けば,何事もなく再開されるようです.

Dockerの仕組みをうまく利用して,余計な手間を増やさずにリモートで開発できる環境を整えているようです.

なお上記の説明はdevcontainer.jsonの"shutdownAction"がデフォルト(stopCompose)の場合の動作であり,変更できます.

shutdownAction
Indicates whether VS Code and other devcontainer.json supporting tools should stop the containers when the related tool window is closed / shut down. Values are none, stopContainer (default for image or Dockerfile), and stopCompose (default for Docker Compose). *1

自分だけがリモートサーバーを使用するならばstopComposeがよいと思いますし,そうでなければその限りではないでしょう.