generated from oci/template
All checks were successful
Build Docker Image on Commit and Schedule / build-and-publish (push) Successful in 2m38s
78 lines
2.5 KiB
Docker
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"]
|