Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 16 additions & 0 deletions images/kitchensink/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
# Example Kitchensink Image

[![Docker Pulls](https://img.shields.io/docker/pulls/codercom/example-kitchensink?label=codercom%2Fexample-kitchensink)](https://hub.docker.com/r/codercom/example-kitchensink)

## Description

A multi-language "kitchen sink" image built on `codercom/enterprise-base:ubuntu`, published for `linux/amd64` and `linux/arm64`. It offers a multi-arch alternative to the `universal` image, whose upstream base ([Microsoft's Universal Dev Container Image](https://github.com/devcontainers/images/tree/main/src/universal)) is only published for amd64.

Toolchains are installed via Homebrew (Tier 1 on Linux ARM64 as of Homebrew 5.0), plus dedicated version managers:

- Homebrew: Go (with `gofumpt`, `golangci-lint`, `staticcheck`), Node.js (with `yarn`, `pnpm`, `fnm`), Ruby, Kotlin, Gradle, Maven, `mise`, `just`, `ninja`, `cmake`, OpenTofu, `fish`, `typos-cli`, `clang-format`, `pkgconf`, `rebar3`
- `uv` with a default Python install
- Rust via `rustup` (with `cargo-binstall` and `cargo-nextest`)
- Docker, Git, and common shell utilities inherited from the base image

All user-facing tooling runs as the `coder` user.
7 changes: 7 additions & 0 deletions images/kitchensink/first-run-notice.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
Welcome to Coder! This environment includes a suite of common tools and languages
managed via Homebrew, mise, uv, fnm, and rustup (Go, Node.js, Python, Rust, Ruby,
Java/Kotlin, and more) for both amd64 and arm64.

➡️ https://github.com/coder/images/tree/main/images/kitchensink

To use another image, modify your devcontainer.json or your Coder Template.
110 changes: 110 additions & 0 deletions images/kitchensink/ubuntu.Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,110 @@
FROM codercom/enterprise-base:ubuntu

# Run everything as root
USER root

SHELL ["/bin/bash", "-c"]
ENV DEBIAN_FRONTEND=noninteractive

################################################################################
# System packages #
################################################################################

# The base image already provides build-essential, curl, git, jq, sudo,
# wget, python3, pipx, and Docker.
RUN apt-get update && \
apt-get install --yes --no-install-recommends --no-install-suggests \
autoconf \
automake \
ca-certificates \
cmake \
less \
sqlite3 \
zsh \
&& rm -rf /var/lib/apt/lists/*

COPY first-run-notice.txt /usr/local/etc/vscode-dev-containers/

# Everything below installs into user-owned prefixes as the coder user.
USER coder
ENV HOME=/home/coder
ENV PATH=$HOME/.local/bin:$PATH

################################################################################
# Homebrew #
################################################################################

# Homebrew 5.0 supports Linux ARM64/AArch64 as Tier 1, so bottles exist
# for both platforms this image builds for.
ENV PATH=/home/linuxbrew/.linuxbrew/bin:/home/linuxbrew/.linuxbrew/sbin:$PATH
RUN NONINTERACTIVE=1 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

RUN brew install \
cargo-binstall \
clang-format \
fish \
fnm \
go \
gofumpt \
golangci-lint \
gradle \
just \
kotlin \
maven \
mise \
ninja \
node \
opentofu \
pkgconf \
pnpm \
rebar3 \
ruby \
staticcheck \
typos-cli \
uv \
yarn \
&& brew cleanup --prune=all && \
rm -rf "$(brew --cache)"

# openjdk is keg-only in Homebrew, so expose it explicitly for tools
# that expect java on PATH.
ENV JAVA_HOME=/home/linuxbrew/.linuxbrew/opt/openjdk
ENV PATH=$PATH:$JAVA_HOME/bin

################################################################################
# uv #
################################################################################

RUN uv python install --default 3.14

################################################################################
# rustup #
################################################################################

ENV PATH=$HOME/.cargo/bin:$PATH
RUN curl --proto '=https' --tlsv1.2 -fsSL https://sh.rustup.rs | sh -s -- -y \
--no-modify-path

RUN cargo binstall cargo-nextest --secure

################################################################################
# go #
################################################################################

ENV GOPATH=$HOME/go
ENV GOBIN=$GOPATH/bin
ENV PATH=$PATH:$GOBIN

################################################################################
# Sanity checks #
################################################################################

RUN brew --version && \
mise --version && \
go version && \
node -v && npm -v && yarn -v && pnpm -v && fnm --version && \
uv --version && python3 --version && \
cargo -V && cargo nextest --version && \
ruby --version && \
java -version && gradle --version && mvn --version && \
just --version && tofu version
1 change: 1 addition & 0 deletions scripts/images.sh
Original file line number Diff line number Diff line change
Expand Up @@ -17,4 +17,5 @@ IMAGES=(
"node"
"desktop"
"universal"
"kitchensink"
)