Initial commit: Claude Dev Container with Java multi-version, Docker CLI, and web terminal
This commit is contained in:
104
Dockerfile
Normal file
104
Dockerfile
Normal file
@@ -0,0 +1,104 @@
|
||||
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"]
|
||||
Reference in New Issue
Block a user