4.3 KiB
Development Container Features
Development Container 'Features' A set of simple and reusable 'features'. Quickly add a language/tool/CLI to a development container. |
'Features' are self-contained units of installation code and development container configuration. Features are designed to install atop a wide-range of base container images (this repo focuses on debian
based images).
Missing a CLI or language in your otherwise perfect container image? Add the relevant 'feature' to the features
property of a devcontainer.json
.
The devcontainer
CLI, implemented by the VS Code Remote-Containers extension and Github Codespaces, is required to process a devcontainer.json
and build a container images declaring 'features'.
Development container 'features' are a proposed addition to the development container specification. Please note that 'features' are in preview and subject to breaking changes.
Repo Structure
.
├── lib
│ └── utils.sh
├── README.md
├── src
│ ├── dotnet
│ │ ├── feature.json
│ │ └── install.sh
│ ├── go
│ │ ├── feature.json
│ │ └── install.sh
| ├── ...
│ │ ├── feature.json
│ │ └── install.sh
├── test
│ ├── dotnet
│ │ └── test.sh
│ └── go
│ | └── test.sh
| ├── ...
│ │ ├── feature.json
│ │ └── install.sh
├── test-scenarios
│ ├── install_jupyterlab.sh
│ ├── install_python_twice.sh
| ├── ...
│ └── scenarios.json
lib
- A collection of tools, scripts, and shared configuration used generally by this repo's features.src
- A collection of subfolders, each declaring a feature. Each subfolder contains at least afeature.json
and the appropriately declared install script.test
- Mirroringsrc
, a folder-per-feature with at least atest.sh
script. Thedevcontainer
CLI will execute these tests in CI.test-scenarios
- More complex scenarios involving a set of features from this repo. Thedevcontainer
CLI will execute these tests in CI.
Usage
To reference a feature from this repository, add the desired features to a devcontainer.json
.
The example below installs the go
and docker-in-docker
declared in the ./src
directory of this repository.
See the relevant feature's README for supported options.
"image": "mcr.microsoft.com/devcontainers/base:ubuntu", // Any generic, debian-based image.
features: {
"devcontainers/features/go@latest": {
"version": "1.18"
},
"devcontainers/features/docker-in-docker@latest": {
"version": "latest",
"moby": true
}
}
The @latest
version annotation is added implicitly if omitted. To pin to a specific release tag, append it to the end of the feature.
features: {
"devcontainers/features/go@v0.0.2": {
"version": "1.18"
},
Contributions
Contibuting to this repository
This repository will accept improvement and bug fix contributions related to the current set of maintained features.
Creating your own collection of features
More information your creating own set of features will be posted soon.