更新 opencode/Dockerfile

This commit is contained in:
wol
2026-07-03 18:32:51 +08:00
parent a771a6e8db
commit 3f30d5fdde
+50 -240
View File
@@ -1,290 +1,100 @@
###############################################################################
#
# Dockerfile (Part 1/2)
#
###############################################################################
FROM ubuntu:24.04
LABEL maintainer="OpenCode Dev"
ENV DEBIAN_FRONTEND=noninteractive
ENV TZ=Asia/Shanghai
ENV LANG=C.UTF-8
ENV LC_ALL=C.UTF-8
###############################################################################
# Base Packages
###############################################################################
SHELL ["/bin/bash", "-c"]
RUN apt-get update && \
apt-get install -y --no-install-recommends \
apt-transport-https \
ca-certificates \
software-properties-common \
gnupg \
lsb-release \
RUN apt-get update && apt-get install -y \
curl \
wget \
git \
git-lfs \
unzip \
zip \
xz-utils \
tar \
gzip \
bzip2 \
nano \
vim \
less \
jq \
vim \
nano \
less \
tree \
htop \
tmux \
procps \
iputils-ping \
dnsutils \
net-tools \
sudo \
ca-certificates \
software-properties-common \
gnupg \
lsb-release \
openssh-client \
rsync \
file \
sudo \
bash-completion \
ripgrep \
fd-find \
fzf \
tar \
xz-utils \
locales \
tzdata \
build-essential \
clang \
llvm \
cmake \
ninja-build \
pkg-config \
make \
libc6-dev \
libssl-dev \
zlib1g-dev \
libbz2-dev \
libreadline-dev \
libsqlite3-dev \
libffi-dev \
liblzma-dev \
libncursesw5-dev \
libxml2-dev \
libxmlsec1-dev \
libcurl4-openssl-dev \
bash-completion \
python3 \
python3-dev \
python3-pip \
python3-venv \
python-is-python3 \
openjdk-21-jdk \
maven \
gradle \
golang \
&& rm -rf /var/lib/apt/lists/*
###############################################################################
# Docker CLI
###############################################################################
RUN mkdir -p /etc/apt/keyrings
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
RUN wget -O - https://packages.adoptium.net/artifactory/api/gpg/key/public \
| gpg --dearmor \
-o /etc/apt/keyrings/adoptium.gpg
RUN echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] \
https://download.docker.com/linux \
$(. /etc/os-release && echo $VERSION_CODENAME) stable" \
> /etc/apt/sources.list.d/docker.list
RUN echo "deb [signed-by=/etc/apt/keyrings/adoptium.gpg] https://packages.adoptium.net/artifactory/deb noble main" \
> /etc/apt/sources.list.d/adoptium.list
RUN apt-get update && \
apt-get install -y docker-ce-cli && \
apt-get install -y temurin-21-jdk && \
rm -rf /var/lib/apt/lists/*
###############################################################################
# Node 22
###############################################################################
ENV MAVEN_VERSION=3.9.11
RUN wget https://downloads.apache.org/maven/maven-3/${MAVEN_VERSION}/binaries/apache-maven-${MAVEN_VERSION}-bin.tar.gz \
&& tar -xf apache-maven-${MAVEN_VERSION}-bin.tar.gz \
&& mv apache-maven-${MAVEN_VERSION} /opt/maven \
&& rm apache-maven-${MAVEN_VERSION}-bin.tar.gz
ENV GRADLE_VERSION=9.0.0
RUN wget https://services.gradle.org/distributions/gradle-${GRADLE_VERSION}-bin.zip \
&& unzip gradle-${GRADLE_VERSION}-bin.zip \
&& mv gradle-${GRADLE_VERSION} /opt/gradle \
&& rm gradle-${GRADLE_VERSION}-bin.zip
RUN curl -fsSL https://deb.nodesource.com/setup_22.x | bash -
RUN apt-get update && \
apt-get install -y nodejs && \
rm -rf /var/lib/apt/lists/*
npm install -g \
pnpm \
yarn \
&& rm -rf /var/lib/apt/lists/*
RUN corepack enable
RUN curl -fsSL https://get.docker.com | sh
RUN corepack prepare pnpm@latest --activate
ENV JAVA_HOME=/opt/java/openjdk
RUN corepack prepare yarn@stable --activate
ENV MAVEN_HOME=/opt/maven
###############################################################################
# Bun
###############################################################################
ENV GRADLE_HOME=/opt/gradle
RUN curl -fsSL https://bun.sh/install | bash
ENV BUN_INSTALL=/root/.bun
ENV PATH=$BUN_INSTALL/bin:$PATH
###############################################################################
# Global npm Packages
###############################################################################
RUN npm install -g \
npm \
typescript \
tsx \
vite \
create-vite \
npm-check-updates \
opencode-ai
###############################################################################
# Python
###############################################################################
RUN python3 -m pip install --break-system-packages --upgrade \
pip \
setuptools \
wheel
RUN python3 -m pip install --break-system-packages \
uv \
poetry \
virtualenv \
ipython \
notebook \
jupyter \
black \
ruff \
requests \
httpx \
flask \
fastapi \
uvicorn \
numpy \
pandas \
matplotlib
###############################################################################
# Rust
###############################################################################
RUN curl https://sh.rustup.rs -sSf | sh -s -- -y
ENV CARGO_HOME=/root/.cargo
ENV PATH=$CARGO_HOME/bin:$PATH
###############################################################################
# Java
###############################################################################
ENV JAVA_HOME=/usr/lib/jvm/java-21-openjdk-amd64
ENV PATH=$JAVA_HOME/bin:$PATH
###############################################################################
# Android
###############################################################################
ENV ANDROID_HOME=/opt/android-sdk
ENV ANDROID_SDK_ROOT=/opt/android-sdk
RUN mkdir -p /opt/android-sdk
RUN mkdir -p /opt/android-sdk/cmdline-tools
ENV PATH=$ANDROID_HOME/platform-tools:$PATH
ENV PATH=$ANDROID_HOME/cmdline-tools/latest/bin:$PATH
###############################################################################
# Workspace
###############################################################################
ENV PATH=$JAVA_HOME/bin:$MAVEN_HOME/bin:$GRADLE_HOME/bin:$PATH
RUN mkdir -p \
/workspace \
/root/.gradle \
/opt/android-sdk \
/root/.m2 \
/root/.npm \
/root/.cache/pip \
/root/.local/share/pnpm \
/root/.cargo \
/root/go \
/root/.android \
/root/.config/opencode
WORKDIR /workspace
###############################################################################
#
# Dockerfile (Part 2/2)
#
###############################################################################
###############################################################################
# Environment
###############################################################################
ENV GOPATH=/root/go
ENV GRADLE_USER_HOME=/root/.gradle
ENV MAVEN_CONFIG=/root/.m2
ENV PYTHONUNBUFFERED=1
ENV PATH=$JAVA_HOME/bin:\
$ANDROID_HOME/platform-tools:\
$ANDROID_HOME/cmdline-tools/latest/bin:\
$GOPATH/bin:\
$CARGO_HOME/bin:\
$PATH
###############################################################################
# Copy Startup Script
###############################################################################
COPY start.sh /usr/local/bin/start.sh
RUN chmod +x /usr/local/bin/start.sh
###############################################################################
# Verify Install
###############################################################################
RUN java -version && \
mvn -version && \
python3 --version && \
node -v && \
npm -v && \
go version && \
rustc --version
###############################################################################
# Expose
###############################################################################
/root/.gradle
EXPOSE 3004
EXPOSE 3005
###############################################################################
# Health Check
###############################################################################
COPY entrypoint.sh /
HEALTHCHECK \
--interval=30s \
--timeout=10s \
--start-period=60s \
--retries=5 \
CMD curl -fsS http://127.0.0.1:3004/ >/dev/null || exit 1
RUN chmod +x /entrypoint.sh
###############################################################################
# Default Workspace
###############################################################################
WORKDIR /workspace
###############################################################################
# Default Command
###############################################################################
ENTRYPOINT ["/usr/local/bin/start.sh"]
ENTRYPOINT ["/entrypoint.sh"]