code-server/Dockerfile
Merith 53e074c7cf
All checks were successful
Build Docker Image on Commit and Schedule / build-and-publish (push) Successful in 2m38s
build daily
2025-07-27 08:58:10 -07:00

78 lines
2.5 KiB
Docker

FROM codercom/code-server:latest
USER root
# Set environment variables
ENV DEFAULT_WORKSPACE=/workspace
# Use the existing coder user from base image instead of non-existent 'code' user
ENV DOCKER_USER=coder
# Define persistent volumes for /home and /workspace
VOLUME ["/home", "/workspace"]
# Layer 0: Base system update (foundation layer)
RUN apt-get update && \
apt-get upgrade -y
# Layer 1: Docker repository setup (changes rarely)
RUN apt-get install -y --no-install-recommends \
ca-certificates \
gnupg \
lsb-release && \
# Add Docker's official GPG key
install -m 0755 -d /etc/apt/keyrings && \
curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc && \
chmod a+r /etc/apt/keyrings/docker.asc && \
# Add Docker repository
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/debian \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
tee /etc/apt/sources.list.d/docker.list > /dev/null && \
apt-get update
# Layer 2: Docker installation (changes when Docker versions update)
RUN apt-get install -y --no-install-recommends \
docker-ce \
docker-ce-cli \
containerd.io \
docker-buildx-plugin \
docker-compose-plugin && \
# Add coder user to docker group for Docker-in-Docker
usermod -aG docker coder
# Layer 3: Homebrew prerequisites (brew.sh requirements)
RUN apt-get install -y --no-install-recommends \
sudo \
build-essential \
procps \
curl \
file \
git
# Layer 4: Code-server entrypoint (always fetch fresh during build)
RUN curl -fsSL -o /usr/bin/entrypoint-official.sh \
https://raw.githubusercontent.com/coder/code-server/main/ci/release-image/entrypoint.sh && \
chmod +x /usr/bin/entrypoint-official.sh
# Copy our custom entrypoint that chainloads the official one
COPY entrypoint.sh /usr/bin/entrypoint.sh
RUN chmod +x /usr/bin/entrypoint.sh
# Set required environment variables for code-server compatibility
ENV ENTRYPOINTD=/home/coder/entrypoint.d
ENV USER=coder
ENV HOME=/home/coder
# Layer 5: Homebrew official requirements for Debian/Ubuntu
RUN apt-get install -y --no-install-recommends \
sudo \
build-essential \
procps \
curl \
file \
git
# Final cleanup: Remove package lists and temporary files
RUN apt-get clean && \
rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
ENTRYPOINT ["/usr/bin/entrypoint.sh", "--bind-addr", "0.0.0.0:8080", "/workspace"]