更新 opencode/Dockerfile
This commit is contained in:
+50
-240
@@ -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"]
|
||||
Reference in New Issue
Block a user