docker自定义制作镜像
创建运行基础环境
本Dockerfile文件安装jdk8,python3.10,node.js环境
# 使用Ubuntu作为基础镜像
FROM ubuntu:20.04
# 设置环境变量避免交互式提示
ENV DEBIAN_FRONTEND=noninteractive
# 1. 安装基础依赖
RUN apt-get update && \
apt-get install -y \
build-essential \
zlib1g-dev \
libncurses5-dev \
libgdbm-dev \
libnss3-dev \
libssl-dev \
libreadline-dev \
libffi-dev \
libsqlite3-dev \
wget \
curl \
tar \
vim \
&& rm -rf /var/lib/apt/lists/*
# 2. 安装Java 8(使用本地包)
# 将本地的jdk包复制到镜像中(请确保Dockerfile同级目录有jdk.tar.gz)
COPY jdk.tar.gz /tmp/
RUN mkdir -p /usr/local/java && \
tar -xzf /tmp/jdk.tar.gz -C /usr/local/java/ && \
rm /tmp/jdk.tar.gz
# 设置Java环境变量
ENV JAVA_HOME /usr/local/java/jdk1.8.0_202
ENV PATH $JAVA_HOME/bin:$PATH
# 3. 编译安装Python 3.10(使用本地包)
# 将本地的Python源码包复制到镜像中(请确保Dockerfile同级目录有Python-3.10.X.tgz)
COPY Python-3.10.4.tgz /tmp/
RUN tar -xzf /tmp/Python-3.10.4.tgz -C /tmp/ && \
cd /tmp/Python-3.10.4 && \
./configure --enable-optimizations && \
make -j $(nproc) && \
make altinstall && \
ln -s /usr/local/bin/python3.10 /usr/local/bin/python3 && \
ln -s /usr/local/bin/python3.10 /usr/local/bin/python && \
ln -s /usr/local/bin/pip3.10 /usr/local/bin/pip && \
rm -rf /tmp/Python-3.10.0*
# 4. 安装本地Python包(可选)
# 将本地requirements.txt复制到镜像中
COPY requirements.txt /app/
RUN pip install -i https://pypi.tuna.tsinghua.edu.cn/simple -r /app/requirements.txt && \
rm -rf /app/requirements.txt
# 安装node.js
COPY node-v22.14.0-linux-x64.tar.xz /tmp/
RUN tar -xf /tmp/node-v22.14.0-linux-x64.tar.xz -C /usr/local --strip-components=1 && \
rm -rf /tmp/node-v22.14.0-linux-x64.tar.xz
# 验证环境
RUN java -version && python --version && node --version && npm --version
# 设置工作目录
WORKDIR /app
构建docker镜像
docker build -t 'python3-10-jdk8-image:v1.0' .
构建java,pyhton应用
FROM python3-10-jdk8-image:v3.0
USER root
WORKDIR /app/xxxxx
MAINTAINER xxxxx
ADD xxxxx.jar /app/xxxxx/xxxxx.jar
# 下载tini
RUN apt-get update && \
apt-get install -y --no-install-recommends tini && \
rm -rf /var/lib/apt/lists/*
# 使用tini启动java应用
ENTRYPOINT ["/usr/bin/tini", "--"]
CMD ["java","-jar","-Duser.timezone=GMT+8","-Dfile.encoding=UTF-8","/app/xxxxx/xxxxx.jar" ]
#暴露端口
EXPOSE 18081
运行构建
docker build -t 'xxxxx-image' .
编写更新脚本start.sh文件
#!/usr/bin/env bash
docker stop xxxxxx-app
docker rm xxxxxx-app
docker rmi xxxxxx-image
docker build -t xxxxxx-image .
docker run --name xxxxxx-app \
--restart=always -p 18081:18081 \
-v /data/xxxxxx/config:/app/xxxxxx/config \
-d xxxxxx-image
直接运行start.sh文件构建运行脚本