# jay-withers/dev-containers architecture

> Architecture diagram of the GitHub repository jay-withers/dev-containers, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-26). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/jay-withers/dev-containers
- Repository: https://github.com/jay-withers/dev-containers

## Overview

This repository provides Azure-focused VS Code dev container images. A developer selects an image in a consuming repo, which obtains it from GHCR; the specialized images extend the shared base. Inside the container, the bundled tools support infrastructure work, and Docker CLI access can reach the host daemon through a mounted socket, with a startup helper handling host-dependent permissions. The README documents these capabilities and image relationships; sampled source only covered commitlint configuration, so internal wiring beyond documented behavior is not inferred.

Main entry points: [`images/base/Dockerfile`](https://github.com/jay-withers/dev-containers/blob/main/images/base/Dockerfile) (Base image), [`images/terraform/Dockerfile`](https://github.com/jay-withers/dev-containers/blob/main/images/terraform/Dockerfile) (Terraform image), [`images/k8s/Dockerfile`](https://github.com/jay-withers/dev-containers/blob/main/images/k8s/Dockerfile) (Kubernetes image), [`images/base/docker-socket-setup.sh`](https://github.com/jay-withers/dev-containers/blob/main/images/base/docker-socket-setup.sh) (Socket setup helper)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_images["Image variants"]
  node_base["Base image"]
  node_terraform["Terraform image"]
  node_k8s["Kubernetes image"]
end

subgraph group_container["Container runtime"]
  node_tooling["Azure development tools"]
  node_tf_tools["Terraform tools"]
  node_k8s_tools["Kubernetes tools"]
  node_socket_setup["Socket setup helper"]
end

node_developer(("Developer"))
node_consumer["Consuming repo"]
node_ghcr[("GitHub Container Registry")]
node_host_daemon[("Host Docker daemon")]
node_vscode["VS Code extensions"]

node_developer -->|"configures image"| node_consumer
node_consumer -->|"pulls image"| node_ghcr
node_ghcr -->|"serves image"| node_base
node_ghcr -->|"serves image"| node_terraform
node_ghcr -->|"serves image"| node_k8s
node_base -->|"base layer"| node_terraform
node_base -->|"base layer"| node_k8s
node_base -->|"includes"| node_tooling
node_terraform -->|"adds"| node_tf_tools
node_k8s -->|"adds"| node_k8s_tools
node_consumer -->|"receives extensions"| node_vscode
node_tooling -->|"Docker CLI access"| node_host_daemon
node_host_daemon -->|"mounted socket"| node_socket_setup
node_socket_setup -.->|"proxies if needed"| node_host_daemon

click node_base "https://github.com/jay-withers/dev-containers/blob/main/images/base/Dockerfile"
click node_terraform "https://github.com/jay-withers/dev-containers/blob/main/images/terraform/Dockerfile"
click node_k8s "https://github.com/jay-withers/dev-containers/blob/main/images/k8s/Dockerfile"
click node_tooling "https://github.com/jay-withers/dev-containers/blob/main/images/base/Dockerfile"
click node_tf_tools "https://github.com/jay-withers/dev-containers/blob/main/images/terraform/Dockerfile"
click node_k8s_tools "https://github.com/jay-withers/dev-containers/blob/main/images/k8s/Dockerfile"
click node_socket_setup "https://github.com/jay-withers/dev-containers/blob/main/images/base/docker-socket-setup.sh"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_base,node_terraform,node_k8s toneBlue
class node_tooling,node_tf_tools,node_k8s_tools,node_socket_setup,node_ghcr,node_host_daemon toneAmber
class node_developer,node_consumer,node_vscode toneIndigo
```

## Components

### Image variants

- [Base image](https://github.com/jay-withers/dev-containers/blob/main/images/base/Dockerfile): `images/base/Dockerfile`
- [Terraform image](https://github.com/jay-withers/dev-containers/blob/main/images/terraform/Dockerfile): `images/terraform/Dockerfile`
- [Kubernetes image](https://github.com/jay-withers/dev-containers/blob/main/images/k8s/Dockerfile): `images/k8s/Dockerfile`

### Container runtime

- [Azure development tools](https://github.com/jay-withers/dev-containers/blob/main/images/base/Dockerfile): `images/base/Dockerfile`
- [Terraform tools](https://github.com/jay-withers/dev-containers/blob/main/images/terraform/Dockerfile): `images/terraform/Dockerfile`
- [Kubernetes tools](https://github.com/jay-withers/dev-containers/blob/main/images/k8s/Dockerfile): `images/k8s/Dockerfile`
- [Socket setup helper](https://github.com/jay-withers/dev-containers/blob/main/images/base/docker-socket-setup.sh): `images/base/docker-socket-setup.sh`

### Other components

- **Developer**
- **Consuming repo**
- **GitHub Container Registry**
- **Host Docker daemon**
- **VS Code extensions**

## Connections

- Developer → Consuming repo: configures image
- Consuming repo → GitHub Container Registry: pulls image
- GitHub Container Registry → Base image: serves image
- GitHub Container Registry → Terraform image: serves image
- GitHub Container Registry → Kubernetes image: serves image
- Base image → Terraform image: base layer
- Base image → Kubernetes image: base layer
- Base image → Azure development tools: includes
- Terraform image → Terraform tools: adds
- Kubernetes image → Kubernetes tools: adds
- Consuming repo → VS Code extensions: receives extensions
- Azure development tools → Host Docker daemon: Docker CLI access
- Host Docker daemon → Socket setup helper: mounted socket
- Socket setup helper → Host Docker daemon: proxies if needed
