Spaces:
Paused
Paused
| # syntax=docker/dockerfile:experimental | |
| ARG BASE=debian:12 | |
| FROM $BASE | |
| RUN apt-get update \ | |
| && apt-get install -y \ | |
| curl \ | |
| dumb-init \ | |
| git \ | |
| build-essential \ | |
| cmake \ | |
| pkg-config \ | |
| python3 \ | |
| python3-pip \ | |
| python3-venv \ | |
| nodejs \ | |
| npm \ | |
| unzip \ | |
| zip \ | |
| jq \ | |
| iputils-ping \ | |
| openjdk-17-jdk \ | |
| maven \ | |
| git-lfs \ | |
| locales \ | |
| lsb-release \ | |
| nano \ | |
| openssh-client \ | |
| procps \ | |
| sudo \ | |
| vim-tiny \ | |
| wget \ | |
| zsh \ | |
| && git lfs install \ | |
| && rm -rf /var/lib/apt/lists/* | |
| # https://wiki.debian.org/Locale#Manually | |
| RUN sed -i "s/# en_US.UTF-8/en_US.UTF-8/" /etc/locale.gen \ | |
| && locale-gen | |
| ENV LANG=en_US.UTF-8 | |
| RUN if grep -q 1000 /etc/passwd; then \ | |
| userdel -r "$(id -un 1000)"; \ | |
| fi \ | |
| && adduser --gecos '' --disabled-password coder \ | |
| && echo "coder ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers.d/nopasswd | |
| # Install Oh My Zsh for coder user | |
| RUN su - coder -c "curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh | sh" \ | |
| && su - coder -c "git clone https://github.com/zsh-users/zsh-autosuggestions /home/coder/.oh-my-zsh/custom/plugins/zsh-autosuggestions" \ | |
| && su - coder -c "git clone https://github.com/zsh-users/zsh-syntax-highlighting.git /home/coder/.oh-my-zsh/custom/plugins/zsh-syntax-highlighting" \ | |
| && su - coder -c "sed -i 's/plugins=(git)/plugins=(git zsh-autosuggestions zsh-syntax-highlighting)/g' /home/coder/.zshrc" \ | |
| && chown -R coder:coder /home/coder/.oh-my-zsh \ | |
| && chown coder:coder /home/coder/.zshrc \ | |
| && chsh -s /usr/bin/zsh coder | |
| RUN ARCH="$(dpkg --print-architecture)" \ | |
| && curl -fsSL "https://github.com/boxboat/fixuid/releases/download/v0.6.0/fixuid-0.6.0-linux-$ARCH.tar.gz" | tar -C /usr/local/bin -xzf - \ | |
| && chown root:root /usr/local/bin/fixuid \ | |
| && chmod 4755 /usr/local/bin/fixuid \ | |
| && mkdir -p /etc/fixuid \ | |
| && printf "user: coder\ngroup: coder\n" > /etc/fixuid/config.yml | |
| COPY entrypoint.sh /usr/bin/entrypoint.sh | |
| RUN chmod +x /usr/bin/entrypoint.sh | |
| # Add new startup script | |
| COPY start.sh /start.sh | |
| RUN chmod +x /start.sh | |
| # Install code-server using the installation script | |
| RUN curl -fsSL https://code-server.dev/install.sh | sh | |
| # Allow users to have scripts run on container startup to prepare workspace. | |
| # https://github.com/coder/code-server/issues/5177 | |
| ENV ENTRYPOINTD=${HOME}/entrypoint.d | |
| # Set default timezone to UTC, can be overridden by TZ environment variable | |
| ENV TZ=UTC | |
| RUN apt-get update && apt-get install -y tzdata \ | |
| && ln -fs /usr/share/zoneinfo/${TZ} /etc/localtime \ | |
| && echo ${TZ} > /etc/timezone \ | |
| && dpkg-reconfigure -f noninteractive tzdata \ | |
| && rm -rf /var/lib/apt/lists/* | |
| EXPOSE 7860 | |
| # This way, if someone sets $DOCKER_USER, docker-exec will still work as | |
| # the uid will remain the same. note: only relevant if -u isn't passed to | |
| # docker-run. | |
| USER 1000 | |
| ENV USER=coder | |
| ENV SHELL=/usr/bin/zsh | |
| WORKDIR /home/coder/workspace | |
| ENTRYPOINT ["/start.sh"] |