Closed6

【devcontainer】ビルド毎にパッケージをインストールしたくない

not75743not75743

悩み

開発環境としてdevcontainerを使っている。
新しくパッケージをインストールする際は

  • Dockerfileのapt installに追記して再ビルド(ubuntu/debianパッケージ)
  • requirements.txtに追記して再ビルド(pythonライブラリ)

のようにしていたがこれだと時間がかかる(パッケージやライブラリのダウンロード+Featuresのダウンロードetc...)
なんとかしたい

not75743not75743

before

わたしの環境ではapt update ~で20秒ほど、Featureでのawscliに20秒要していた

Dockerfile

FROM debian:bookworm-slim
WORKDIR /code
RUN apt update && apt install -y tree less jq curl postgresql-client sqlite3

devcontainer.json

{
	"name": "ubuntu",
	"dockerComposeFile": "../docker-compose.yaml",
	"service": "test",
	"workspaceFolder": "/code",
	"features": {
		"ghcr.io/devcontainers/features/aws-cli:1": {}
	},
	"customizations": {
		"vscode": {
			"extensions": [
				"ms-python.python"
			]
		}
	}
}
not75743not75743

起動スクリプト指定時の注意

  • ホスト側とファイル共有してファイルを指定する必要がある
    • docker-composeのvolumeでもDockerfileのCOPYでもなんでも
  • 起動スクリプトには実行権限が必要
    • "postCreateCommand": "/bin/sh .devcontainer/<起動コマンドスクリプト>"でOK

https://zenn.dev/rhene/scraps/b468efe66169e5

not75743not75743

lifecycle-scripts

https://containers.dev/implementors/json_reference/#lifecycle-scripts

コンテナのライフサイクル(create/deleteなど)のときどきで必要なコマンドを指定出来るパラメータ
起動後に指定できるパラメータは以下の3つ

  • postCreateCommand
    • devcontainerをユーザが操作可能になったら実行されるコマンド
  • postStartCommand
    • コンテナが正常に起動するたびに実行されるコマンド
  • postAttachCommand
    • ツールがコンテナに正常にアタッチされるたびに実行されるコマンド
このスクラップは2024/03/05にクローズされました