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
. A
tool supporting the dev container specification is required to build a development
container.
⚠️ Development container 'features' are a proposed addition to the development container specification. Please note that 'features' are in preview and subject to breaking changes.
Once the proposed specification is accepted, implementation details will be published at https://containers.dev.
Usage
To reference a feature from this repository, add the desired features to a devcontainer.json
. Each feature has a README.md
that shows how to reference the feature and which options are available for that feature.
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.
"name": "my-project-devcontainer",
"image": "mcr.microsoft.com/devcontainers/base:ubuntu", // Any generic, debian-based image.
"features": {
"ghcr.io/devcontainers/features/go:1": {
"version": "1.18"
},
"ghcr.io/devcontainers/features/docker-in-docker:1": {
"version": "latest",
"moby": true
}
}
The :latest
version annotation is added implicitly if omitted. To pin to a specific package version
(example), append it to the end of the
feature. Features follow semantic versioning conventions, so you can pin to a major version :1
, minor version :1.0
, or patch version :1.0.0
by specifying the appropriate label.
"features": {
"ghcr.io/devcontainers/features/go:1.0.0": {
"version": "1.18"
}
}
The devcontainer CLI reference implementation (or a supporting tool) can be used to build a project's dev container declaring 'features'.
git clone <my-project-with-devcontainer>
devcontainer build --workspace-folder <path-to-my-project-with-devcontainer>
Repo Structure
.
├── README.md
├── src
│ ├── dotnet
│ │ ├── devcontainer-feature.json
│ │ └── install.sh
│ ├── go
│ │ ├── devcontainer-feature.json
│ │ └── install.sh
| ├── ...
│ │ ├── devcontainer-feature.json
│ │ └── install.sh
├── test
│ ├── dotnet
│ │ └── test.sh
│ ├── go
| | ├── scenarios.json
| | ├── test_scenario_1.json
│ | └── test.sh
| ├── ...
│ │ └── test.sh
...
src
- A collection of subfolders, each declaring a feature. Each subfolder contains at least adevcontainer-feature.json
and aninstall.sh
script.test
- Mirroringsrc
, a folder-per-feature with at least atest.sh
script. Thedevcontainer
CLI will execute these tests in CI.
Contributions
Creating your own collection of features
The feature distribution specification outlines a pattern for community members and organizations to self-author features in repositories they control.
A template repo devcontainers/feature-template
and GitHub Action are available to help bootstrap self-authored features.
We are eager to hear your feedback on self-authoring! Please provide comments and feedback on spec issue #70.
Contributing to this repository
This repository will accept improvement and bug fix contributions related to the current set of maintained features.