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 arenone
,stopContainer
(default for image or Dockerfile), andstopCompose
(default for Docker Compose). *1
自分だけがリモートサーバーを使用するならばstopCompose
がよいと思いますし,そうでなければその限りではないでしょう.