43 lines
1.7 KiB
Plaintext
43 lines
1.7 KiB
Plaintext
---
|
|
title: "devcontainer"
|
|
author: "James"
|
|
date: "2022-12-28"
|
|
categories: [containers]
|
|
description: Notes on devcontainer work.
|
|
---
|
|
|
|
A few weeks I took a look a vscode's devcontainer standard.
|
|
It is a standard way of building and running a docker container for development
|
|
from a specially formatted json file.
|
|
|
|
Over the holiday I played around a little bit with it.
|
|
|
|
They have a node cli program that can build, launch, and attach to the container
|
|
from the json file without vscode hosted [here](https://github.com/devcontainers/cli).
|
|
|
|
For the most part the special json file defines all the stuff you would think it does
|
|
and works as I would have expected.
|
|
|
|
The coolest thing I saw with it is they have this concept of "features".
|
|
|
|
A lot of time with Dockerfiles there is a lot of repetition with the same code repeated
|
|
in multiple Dockerfiles for different images.
|
|
There's different ways to solve this I've seen.
|
|
|
|
My custom development container handler (`dev_container`) uses
|
|
[templates](https://github.com/jpace121/dev_contain_templates/blob/master/templates/base.Dockerfile.template),
|
|
for example.
|
|
|
|
Te vscode solution has this thing called a "feature".
|
|
They build a base image from a Dockerfile like normal, and then add listed
|
|
"features" on top of the original Dockerfile.
|
|
Each feature is basically a tar file with a well known named script that the build
|
|
thing runs that can modify the original image.
|
|
|
|
I was able to write my own "feature"
|
|
[here](https://github.com/jpace121/jpace121-devcontainer-features/blob/main/src/jpace121-devel/install.sh)
|
|
which adds my normal cli stuff (like `ag` and `emacs`) to an image pretty easily.
|
|
|
|
They provide a github action to publish the features as an OCI archive, so I got
|
|
that for free basically.
|