Files
claude-dev-container/Dockerfile

105 lines
2.8 KiB
Docker

FROM ubuntu:22.04
# Prevent interactive prompts during installation
ENV DEBIAN_FRONTEND=noninteractive
# Set up user and workspace
ENV USER=developer
ENV HOME=/home/$USER
ENV WORKSPACE=$HOME/workspace
ENV SDKMAN_DIR=$HOME/.sdkman
# Install base dependencies
RUN apt-get update && apt-get install -y \
curl \
wget \
git \
build-essential \
zip \
unzip \
software-properties-common \
ca-certificates \
gnupg \
lsb-release \
sudo \
nano \
vim \
htop \
net-tools \
&& rm -rf /var/lib/apt/lists/*
# Create developer user with sudo privileges
RUN useradd -m -s /bin/bash -G sudo $USER && \
echo "$USER ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers && \
mkdir -p $WORKSPACE && \
chown -R $USER:$USER $HOME
# Switch to developer user
USER $USER
WORKDIR $HOME
# Install SDKMAN
RUN curl -s "https://get.sdkman.io" | bash
# Install multiple Java versions via SDKMAN
RUN bash -c "source $SDKMAN_DIR/bin/sdkman-init.sh && \
sdk install java 11.0.22-tem && \
sdk install java 17.0.10-tem && \
sdk install java 21.0.2-tem && \
sdk install java 25-tem && \
sdk default java 25-tem"
# Install Maven and Gradle
RUN bash -c "source $SDKMAN_DIR/bin/sdkman-init.sh && \
sdk install maven && \
sdk install gradle"
# Switch back to root for system-level installations
USER root
# Install Docker CLI (no daemon - will use host socket)
RUN install -m 0755 -d /etc/apt/keyrings && \
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg && \
chmod a+r /etc/apt/keyrings/docker.gpg && \
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null && \
apt-get update && \
apt-get install -y docker-ce-cli docker-compose-plugin && \
usermod -aG docker $USER && \
rm -rf /var/lib/apt/lists/*
# Install ttyd (web terminal)
RUN wget https://github.com/tsl0922/ttyd/releases/download/1.7.7/ttyd.x86_64 -O /usr/local/bin/ttyd && \
chmod +x /usr/local/bin/ttyd
# Install Node.js (needed for Claude Code CLI)
RUN curl -fsSL https://deb.nodesource.com/setup_20.x | bash - && \
apt-get install -y nodejs && \
rm -rf /var/lib/apt/lists/*
# Switch back to developer user
USER $USER
# Install Claude Code CLI
RUN npm install -g @anthropic-ai/claude-code
# Create .claude directory (will be mounted with credentials from Mac)
RUN mkdir -p $HOME/.claude
# Source SDKMAN in bashrc for interactive shells
RUN echo 'source "$SDKMAN_DIR/bin/sdkman-init.sh"' >> $HOME/.bashrc
# Create startup script
USER root
COPY entrypoint.sh /entrypoint.sh
RUN chmod +x /entrypoint.sh
# Expose ports
# 7681: ttyd (web terminal)
EXPOSE 7681
USER $USER
WORKDIR $WORKSPACE
ENTRYPOINT ["/entrypoint.sh"]