Skip to content

Commit 5b6789a

Browse files
refactor JDK installation to use SDKMAN!
Replaces manual installation of JDK 21 and 25 with SDKMAN! for better version management. Consolidates system dependencies for pyenv into the main dependencies installation step. Updates environment variables and .bashrc configuration to reflect the use of SDKMAN! and the new JAVA_HOME path. Adds version checks for Python and Conda in the final environment setup output.
1 parent e5d10ce commit 5b6789a

File tree

1 file changed

+25
-25
lines changed

1 file changed

+25
-25
lines changed

Dockerfile

Lines changed: 25 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ FROM ubuntu:latest
33
ENV DEBIAN_FRONTEND=noninteractive
44
ENV TZ=Asia/Shanghai
55

6-
# 安装基本工具和库
6+
# 安装系统依赖需求
77
RUN apt-get update && apt-get upgrade -y && apt-get install -y \
88
neofetch \
99
build-essential \
@@ -22,6 +22,13 @@ RUN apt-get update && apt-get upgrade -y && apt-get install -y \
2222
software-properties-common \
2323
zip \
2424
unzip \
25+
libbz2-dev \
26+
libreadline-dev \
27+
libsqlite3-dev \
28+
libssl-dev \
29+
libffi-dev \
30+
liblzma-dev \
31+
zlib1g-dev \
2532
&& rm -rf /var/lib/apt/lists/*
2633

2734
# 安装 NVM
@@ -42,17 +49,6 @@ RUN . "$NVM_DIR/nvm.sh" \
4249
&& corepack prepare yarn@stable --activate \
4350
&& npm install -g bun
4451

45-
# 安装 pyenv 依赖
46-
RUN apt-get update && apt-get install -y \
47-
libbz2-dev \
48-
libreadline-dev \
49-
libsqlite3-dev \
50-
libssl-dev \
51-
libffi-dev \
52-
liblzma-dev \
53-
zlib1g-dev \
54-
&& rm -rf /var/lib/apt/lists/*
55-
5652
# 安装 pyenv
5753
ENV PYENV_ROOT=/root/.pyenv
5854
ENV PATH=$PYENV_ROOT/shims:$PYENV_ROOT/bin:$PATH
@@ -82,17 +78,17 @@ RUN pip install --no-cache-dir \
8278
scikit-learn \
8379
requests
8480

85-
# 安装 JDK 21 和 25
86-
RUN apt-get update && apt-get install -y openjdk-21-jdk \
87-
&& rm -rf /var/lib/apt/lists/*
88-
89-
# 安装 JDK 25 (从 Oracle 或其他源)
90-
RUN wget https://download.oracle.com/java/25/latest/jdk-25_linux-x64_bin.tar.gz \
91-
&& mkdir -p /usr/lib/jvm \
92-
&& tar -xzf jdk-25_linux-x64_bin.tar.gz -C /usr/lib/jvm \
93-
&& rm jdk-25_linux-x64_bin.tar.gz
94-
95-
ENV JAVA_HOME=/usr/lib/jvm/java-21-openjdk-amd64
81+
# Install SDKMAN! and manage multiple JDK versions
82+
ENV SDKMAN_DIR=/root/.sdkman
83+
ENV JAVA21_VERSION=21.0.5-tem
84+
ENV JAVA25_VERSION=25.ea.1-open
85+
RUN curl -s "https://get.sdkman.io" | bash \
86+
&& bash -c "source $SDKMAN_DIR/bin/sdkman-init.sh \
87+
&& sdk install java ${JAVA21_VERSION} \
88+
&& sdk install java ${JAVA25_VERSION} \
89+
&& sdk default java ${JAVA21_VERSION}"
90+
91+
ENV JAVA_HOME=$SDKMAN_DIR/candidates/java/current
9692
ENV PATH=$JAVA_HOME/bin:$PATH
9793

9894
# 安装 Maven
@@ -130,8 +126,10 @@ RUN echo '' >> /root/.bashrc \
130126
&& echo 'export CONDA_DIR="/opt/conda"' >> /root/.bashrc \
131127
&& echo 'export PATH="$CONDA_DIR/bin:$PATH"' >> /root/.bashrc \
132128
&& echo '' >> /root/.bashrc \
133-
&& echo '# Java configuration' >> /root/.bashrc \
134-
&& echo 'export JAVA_HOME="/usr/lib/jvm/java-21-openjdk-amd64"' >> /root/.bashrc \
129+
&& echo '# SDKMAN configuration' >> /root/.bashrc \
130+
&& echo 'export SDKMAN_DIR="/root/.sdkman"' >> /root/.bashrc \
131+
&& echo '[ -s "$SDKMAN_DIR/bin/sdkman-init.sh" ] && source "$SDKMAN_DIR/bin/sdkman-init.sh"' >> /root/.bashrc \
132+
&& echo 'export JAVA_HOME="$SDKMAN_DIR/candidates/java/current"' >> /root/.bashrc \
135133
&& echo 'export PATH="$JAVA_HOME/bin:$PATH"' >> /root/.bashrc \
136134
&& echo '' >> /root/.bashrc \
137135
&& echo '# Maven configuration' >> /root/.bashrc \
@@ -145,6 +143,8 @@ RUN echo '' >> /root/.bashrc \
145143
# 显示版本信息
146144
RUN echo "=== Environment Setup Complete ===" \
147145
&& neofetch \
146+
&& echo "\nPython Version:" && python --version \
147+
&& echo "\nConda Version:" && conda --version \
148148
&& echo "\nNode Version:" && . "$NVM_DIR/nvm.sh" && node --version \
149149
&& echo "\nNPM Version:" && . "$NVM_DIR/nvm.sh" && npm --version \
150150
&& echo "\nYarn Version:" && . "$NVM_DIR/nvm.sh" && yarn --version \

0 commit comments

Comments
 (0)