35dcc67e6a
- Default ubuntu user is removed - Can add apt packages during image building with --apt-packages="list of pkg" - Remove and/or prune podman image option - Fix condition checks
112 lines
3.1 KiB
Docker
112 lines
3.1 KiB
Docker
# syntax=docker/dockerfile:1
|
|
|
|
ARG UBUNTU_VERSION=26.04
|
|
FROM ubuntu:${UBUNTU_VERSION}
|
|
|
|
ARG NODE_VERSION=24.21.0
|
|
ARG OPENCODE_VERSION=2.0.3
|
|
|
|
ARG EXTRA_APT_PACKAGES=""
|
|
|
|
ARG DEV_UID=1000
|
|
ARG DEV_GID=1000
|
|
|
|
ENV DEBIAN_FRONTEND=noninteractive
|
|
SHELL ["/bin/bash", "-o", "pipefail", "-c"]
|
|
|
|
# System packages
|
|
RUN apt-get update \
|
|
&& apt-get upgrade -y \
|
|
&& apt-get install -y --no-install-recommends \
|
|
bash \
|
|
build-essential \
|
|
ca-certificates \
|
|
curl \
|
|
fd-find \
|
|
file \
|
|
git \
|
|
gzip \
|
|
jq \
|
|
less \
|
|
locales \
|
|
maven \
|
|
neovim \
|
|
openjdk-11-jdk \
|
|
openjdk-17-jdk \
|
|
openssh-client \
|
|
iputils-ping \
|
|
pkg-config \
|
|
procps \
|
|
python3 \
|
|
python3-dev \
|
|
python3-pip \
|
|
python3-venv \
|
|
ripgrep \
|
|
tar \
|
|
tree \
|
|
unzip \
|
|
util-linux \
|
|
wget \
|
|
xz-utils \
|
|
zip \
|
|
&& update-alternatives --set java /usr/lib/jvm/java-17-openjdk-amd64/bin/java \
|
|
&& update-alternatives --set javac /usr/lib/jvm/java-17-openjdk-amd64/bin/javac \
|
|
&& echo 'en_US.UTF-8 UTF-8' > /etc/locale.gen \
|
|
&& locale-gen \
|
|
&& ln -s "$(command -v fdfind)" /usr/local/bin/fd
|
|
|
|
RUN if [ -n "${EXTRA_APT_PACKAGES}" ]; then \
|
|
echo "Installing extra packages: ${EXTRA_APT_PACKAGES}" \
|
|
&& apt-get install -y --no-install-recommends ${EXTRA_APT_PACKAGES}; \
|
|
fi
|
|
|
|
RUN rm -rf /var/lib/apt/lists/*
|
|
|
|
COPY ./certs /usr/local/share/ca-certificates
|
|
RUN update-ca-certificates
|
|
ENV NODE_EXTRA_CA_CERTS=/etc/ssl/certs/ca-certificates.crt
|
|
|
|
# Remove ubuntu user and create the dev one with host uid and gid
|
|
RUN (userdel -r ubuntu 2>/dev/null || true) \
|
|
&& (groupdel ubuntu 2>/dev/null || true) \
|
|
&& groupadd --gid "${DEV_GID}" dev \
|
|
&& useradd --uid "${DEV_UID}" --gid "${DEV_GID}" --create-home --shell /bin/bash dev
|
|
|
|
# Node.js + OpenCode
|
|
RUN f="node-v${NODE_VERSION}-linux-x64.tar.xz" \
|
|
&& curl -fsSLO "https://nodejs.org/dist/v${NODE_VERSION}/${f}" \
|
|
&& curl -fsSLO "https://nodejs.org/dist/v${NODE_VERSION}/SHASUMS256.txt" \
|
|
&& grep " ${f}\$" SHASUMS256.txt | sha256sum -c - \
|
|
&& tar -xJf "node-v${NODE_VERSION}-linux-x64.tar.xz" -C /usr/local --strip-components=1 \
|
|
&& rm -f "${f}" SHASUMS256.txt \
|
|
&& echo -n "node version: " && node --version \
|
|
&& echo -n "npm version: " && npm --version \
|
|
&& npm install -g "@opencode/cli@${OPENCODE_VERSION}" \
|
|
&& echo -n "opencode version: " && opencode --version \
|
|
&& npm cache clean --force
|
|
|
|
# User directories and dot expansion
|
|
RUN mkdir -p \
|
|
/workspace \
|
|
/home/dev/.config/opencode \
|
|
/home/dev/.local/share/opencode \
|
|
/home/dev/.cache/opencode \
|
|
/home/dev/.cache/pip \
|
|
/home/dev/.npm \
|
|
/home/dev/.m2 \
|
|
&& chown -R dev:dev /workspace /home/dev \
|
|
&& printf '%s\n' 'shopt -s dotglob' >> /etc/bash.bashrc
|
|
|
|
# Runtime
|
|
USER dev
|
|
|
|
ENV HOME=/home/dev \
|
|
EDITOR=nvim \
|
|
VISUAL=nvim \
|
|
PIP_CACHE_DIR=/home/dev/.cache/pip \
|
|
NPM_CONFIG_CACHE=/home/dev/.npm
|
|
|
|
WORKDIR /workspace
|
|
|
|
CMD ["bash"]
|