Skip to content

Orchestrator interop #10

@Chuxel

Description

@Chuxel

Unlike some developer centric formats, a non-goal for devcontainer.json is to become yet another multi-container orchestrator format. Instead, its goal is to enable development in containers regardless of how they are orchestrated. There's a single container / non-orchestrated build property, but the dockerComposeFile property is representative of this desire today (along with support for the "attach" scenario in Remote - Containers, though that's not directly related to the dev container spec). Native Kubernetes integration is one long requested example another format (microsoft/vscode-remote-release#12), but clouds have their own formats, we can expect more to evolve over time, and there's no doubt we could improve interop with Docker Compose.

With that in mind, there are two related proposals to consider:

  1. Introducing an orchestrator property much like customizations (for Move settings and extensions properties to vscode namespace #1) that we keep in mind for the reference implementation (Publish reference implementation #9) where orchestrator specific properties can live.

    • We also need to consider whether we'd support connecting to multiple services from the same devcontainer.json given User contributable container features #8. Today you connect to multiple orchestrated containers using separate devcontainer.json files as described in VS Code docs, but the idea of a feature needs to be able to be applied to multiple orchestrated containers when their images are built and they are spun up. This naturally leads to whether a better (or additional) model is to...
  2. Introduce an extension to the spec that would describe how to "embed" devcontainer.json in an orchestrator format. For example, an automated json <=> yaml conversion that enables it to exist in Docker Compose x-* extension attributes ([RfC] generalize support for custom extensions docker/compose#7200).

While each new orchestrator would still necessitate updates to the reference implementation (#9) and/or the orchestrator's code, documenting how this could be achieved would help guide the implementation, and keep everyone in a place that will avoid unexpected issues with changes down the road. For example, if the Docker Compose spec ended up having first class support for certain existing devcontainer.json properties, there would still be a known path for those that were not.

Metadata

Metadata

Assignees

No one assigned

    Labels

    proposalStill under discussion, collecting feedback

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions