Closed6
【devcontainer】ビルド毎にパッケージをインストールしたくない
悩み
開発環境としてdevcontainerを使っている。
新しくパッケージをインストールする際は
- Dockerfileのapt installに追記して再ビルド(ubuntu/debianパッケージ)
- requirements.txtに追記して再ビルド(pythonライブラリ)
のようにしていたがこれだと時間がかかる(パッケージやライブラリのダウンロード+Featuresのダウンロードetc...)
なんとかしたい
先人たちが記事にしてくれている
devcontainerのlifecycleを使い、ビルド後にインストール処理を走らせれば良さげ
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"
]
}
}
}
起動スクリプト指定時の注意
- ホスト側とファイル共有してファイルを指定する必要がある
- docker-composeのvolumeでもDockerfileのCOPYでもなんでも
- 起動スクリプトには実行権限が必要
-
"postCreateCommand": "/bin/sh .devcontainer/<起動コマンドスクリプト>"
でOK
-
lifecycle-scripts
コンテナのライフサイクル(create/deleteなど)のときどきで必要なコマンドを指定出来るパラメータ
起動後に指定できるパラメータは以下の3つ
- postCreateCommand
- devcontainerをユーザが操作可能になったら実行されるコマンド
- postStartCommand
- コンテナが正常に起動するたびに実行されるコマンド
- postAttachCommand
- ツールがコンテナに正常にアタッチされるたびに実行されるコマンド
結論
lifecycle-scriptsのpost~を使えば解決
このスクラップは2024/03/05にクローズされました