一、先制作python镜像
(1). 写Dockerfile文件, 直接build就完成了, 但有遇到jdk装不上的情况看第2条
FROM python:3.11
# 设置环境变量,避免交互式安装的问题
ENV DEBIAN_FRONTEND=noninteractive
# 更新包列表并安装 OpenJDK(Java)
RUN apt-get update && \
apt-get install -y \
wget \
curl \
telnet \
openjdk-17-jdk
RUN apt-get clean && \
rm -rf /var/lib/apt/lists/*
# 设置 JAVA_HOME 环境变量
ENV JAVA_HOME=/usr/lib/jvm/jdk-17.0.13
ENV PATH=$PATH:$JAVA_HOME/bin
COPY requirements.txt /home/app/
# 这里修改下,增加删除cache操作
RUN pip install --upgrade pip && pip3 install -r /home/app/requirements.txt -i https://mirrors.aliyun.com/pypi/simple && \
rm -r /root/.cache
# 设置工作目录
WORKDIR /home/app/
## 检查 Python 和 Java 版本
RUN python --version && java -version
(2). jdk装不上的情况, 进行离线安装 (这里世界拉取的python镜像,默认自带的是debian12系统,如果不想用这个系统,可以from ubuntu等,然后单独安装python)
1. 写Dockerfile并build
FROM python:3.11
# 设置环境变量,避免交互式安装的问题
ENV DEBIAN_FRONTEND=noninteractive
# 更新包列表并安装基础工具及 JDK 和 Python
RUN apt-get update && \
apt-get install -y \
wget \
curl \
telnet \
RUN apt-get clean && \
rm -rf /var/lib/apt/lists/*
COPY requirements.txt /home/app/
# 这里修改下,增加删除cache操作
RUN pip install --upgrade pip && pip3 install -r /home/app/requirements.txt -i https://mirrors.aliyun.com/pypi/simple && \
rm -r /root/.cache
# 设置工作目录
WORKDIR /home/app/
2. 进入容器docker exec -it "容器id" bash
3. 离线下载jdk17,https://www.oracle.com/cn/java/technologies/downloads/#java17, 解压
4. 将文件夹挂载到容器里,并创建启动容器docker run -v /home/user/jdk-17.0.13:/home/app -d --name my-container "容器id" /bin/bash -c 'while true; do echo "hello"; sleep 10; done'
5.
# 1. 容器内创建文件夹
mkdir /usr/bin/jvm
# 2. jdk移动文件夹到 /usr/bin/jvm
mv /home/app/jdk-17.0.13 /usr/bin/jvm
# 3. 配置环境变量
vim /etc/profile
# 4. 在这个文件最下方新增环境变量
JAVA_HOME=/usr/lib/jvm/jdk-17.0.13
PATH=$PATH:$JAVA_HOME/bin
export JAVA_HOME
# 5 加载环境变量
source /etc/profile
# 测试
javac
6. 到这里就完成了,但会发现每次进容器都需要source一下,无法自动加载。我这边就直接在dockerfile中增加环境变量解决
- commit镜像,将刚离线安装的jdk打包到新的镜像中
docker commit "容器名" ql/my_image:v2
- 写dockerfile, build, 就完成了
# 使用刚刚commit的镜像
FROM ql/my_image:v2
ENV JAVA_HOME=/usr/lib/jvm/jdk-17.0.13
ENV PATH=$PATH:$JAVA_HOME/bin
# 设置工作目录
WORKDIR /home/app