如何在基础镜像中安装指定python版本

背景

由于规范要求要使用指定的镜像版本,但是由于该镜像中的python与我使用的版本有差异,怕引起一些不必要的兼容问题,所以我需要自己按基础镜像基础上安装对应版本的python。

Dockerfile

直接上最终dockerfile,为什么这样写,后面说到。

FROM centos:7
# 指定工作目录
WORKDIR /work

ARG PYTHON_VERSION=3.8.14 

ENV WORK_PATH=/work

COPY Python-$PYTHON_VERSION.tgz  .

# 安装python相关的依赖和编译环境
RUN set -ex \
  && yum -y install zlib-devel bzip2-devel libffi-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel gcc make\
  && yum clean all \
  && tar --extract -f $WORK_PATH/Python-$PYTHON_VERSION.tgz \
  && cd $WORK_PATH/Python-$PYTHON_VERSION/ \
  && mkdir /usr/local/python3 \
  # && ./configure --prefix=/usr/local/python3 --enable-optimizations \  #有bug不能加 --enable-optimizations
  && ./configure --prefix=/usr/local/python3 \
  && make clean \
  && make && make install \
  && ln -s /usr/local/python3/bin/python3 /usr/bin/python3 \
  && ln -s /usr/local/python3/bin/pip3 /usr/bin/pip3 \
  # 开始删除垃圾
  && rm -r $WORK_PATH/Python-$PYTHON_VERSION* \
  && yum -y remove zlib-devel bzip2-devel libffi-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel gcc make \
  # 打印python 版本 和 pip版本
  && python3 --version \
  && pip3 -V \

优化过程

增加变量PYTHON_VERSION

使用PYTHON_VERSION来定义版本,这样有个好处就是后续如果要更新,换其他版本的python,修改该字段即可,而不用全局改很多地方。

...
ARG PYTHON_VERSION=3.8.14 

ENV WORK_PATH=/work

COPY Python-$PYTHON_VERSION.tgz  .

# 安装python相关的依赖和编译环境
RUN set -ex \
  ....
  && tar --extract -f $WORK_PATH/Python-$PYTHON_VERSION.tgz \
  && cd $WORK_PATH/Python-$PYTHON_VERSION/ \
  ...
  # 开始删除垃圾
  && rm -r $WORK_PATH/Python-$PYTHON_VERSION* \

...

命令集中

一条命令是一层,这样的好处整个docker就不会分多层,如果这段没有被修改,再次build的时候会加速

删除编译工具和安装文件

没删除这些的时候538M

删除后329M,直接减少了差不多200M

总结

官方提供的python镜像在alpine3.16基础上只加了几十M,人麻了。

参考:

https://blog.csdn.net/dragoo1/article/details/120403364
https://blog.csdn.net/lian01110a/article/details/120467814

posted @   Klay_zhu  阅读(1340)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示