Skip to content

A collection of Dev Container Features managed by Dev Container spec maintainers. See https://github.com/devcontainers/feature-starter to publish your own

License

Notifications You must be signed in to change notification settings

devcontainers/features

This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Folders and files

NameName
Last commit message
Last commit date

Latest commit

0e06679 Β· Nov 30, 2023
Oct 27, 2023
Sep 28, 2023
May 13, 2022
Nov 30, 2023
Nov 30, 2023
Jun 3, 2022
Jul 27, 2022
Mar 23, 2023
Jun 29, 2022
Mar 23, 2023

Repository files navigation

Development Container Features

devcontainers organization logo 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.

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.

You may learn about Features at containers.dev, which is the website for the dev container specification.

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 a devcontainer-feature.json and an install.sh script.
  • test - Mirroring src, a folder-per-feature with at least a test.sh script. The devcontainer 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.

🀝 You can read more about how to contribute in CONTRIBUTING.md. ❀️