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

news/2024/5/19 13:49:23/文章来源:https://www.cnblogs.com/Klay/p/16704063.html

背景

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

Dockerfile

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

FROM centos:7
# 指定工作目录
WORKDIR /workARG PYTHON_VERSION=3.8.14 ENV WORK_PATH=/workCOPY 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=/workCOPY 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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_9354.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【2022中国高校计算机大赛 微信大数据挑战赛】Top 1-6 方案总结

前段时间参加了 2022中国高校计算机大赛 微信大数据挑战赛,比赛链接:https://algo.weixin.qq.com/。 由于时间原因精力有限,我们队伍的方案做的比较简陋: 【初赛:rank-18,复赛:rank-40&#xff…

网课查题接口 搜题公众号对接题库教程 (附赠题库接口)

网课查题接口 搜题公众号对接题库教程 (附赠题库接口) 本平台优点: 多题库查题、独立后台、响应速度快、全网平台可查、功能最全! 1.想要给自己的公众号获得查题接口,只需要两步! 2.题库: 查…

bm19bm7

为什么不定义如果两点相等呢 等于的话峰值统一取右 以右来比较 波峰就行 不一定是最大的 在这里插入代码片 import java.util.*;public class Solution {/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可** * param nums…

微信小程序转为App并上架应用市场

先说说背景吧,笔者开发了一款微信工具类小程序,刚开始,小程序的日访问量和用户数都还可以,但后面慢慢的发现,受限于微信小程序平台规则,很难对用户进行更深入的运营,用户流失问题也将逐渐凸显出…

‘std::thread‘ has not been declared

出现这个问题的原因就是 目前MinGW GCC64还不支持std::thread 这是我的gcc版本 PS D:\MyCode> gcc --version gcc.exe (x86_64-win32-seh-rev0, Built by MinGW-W64 project) 8.1.0 Copyright © 2018 Free Software Foundation, Inc. This is free software; see the s…

七、RequestResponse

Request&Response 第一章 Request 1. 目标 了解Request的概念了解Request的组成部分掌握Request获取请求行的信息掌握Request获取请求头的信息掌握Request获取请求参数掌握解决请求参数乱码掌握Request域对象掌握请求转发 2. 内容 2.1 Request概述 2.1.1 Request的概…

Part16:Pandas的分层索引MultiIndex怎么用?【详解】

Pandas的分层索引Multilndex 1为什么要学习分层索引Multilndex? 1、分层索引:在一个轴向上拥有多个索引层级,可以表达更高维度数据的形式; 2、方便的进行数据筛选,如果有序则性能更好; 3、groupby等操作的结果,如果是多KEY,结…

元宇宙产业委常务副主任委员甘华鸣:关于术语“元宇宙”以及相关问题

【央链知播-编者按:元宇宙产业委常务副主任委员甘华鸣就全国科学技术名词审定委员会元宇宙及核心术语概念研讨会提出的一个观点,发表自己的看法,写了《关于术语“元宇宙”以及相关问题》一文,现转发供元宇宙产业和学术界思考】 以…

老鼠出迷宫

老鼠出迷宫 现有一个图形如下: 要求老鼠在左边第一个位置,走到绿色标的出口橙色为边界不能走。 表盘可以看做是一个[8][7]大小的二维数组,可以用1表示边界,0表示可以走 int [][] arrMap new int[8][7];得到一个数组&#xff1…

Python——基础语法(模块、包、文件读写等操作)

一、模块 概述:一个模块就是一个扩展名为.py的文件,可以包含多个函数、类、语句;使用模块可以提高代码的可维护性、可重用性,避免函数名和变量名冲突,方便其他程序和脚本的导入和使用。 二、模块的自定义 创建一个新…

基于ssm的社区医院儿童预防接种管理系统设计与实现-计算机毕业设计源码+LW文档

开发语言:Java 框架:ssm JDK版本:JDK1.8 服务器:tomcat7 数据库:mysql 5.7(一定要5.7版本) 数据库工具:Navicat11 开发软件:eclipse/myeclipse/idea Maven包&…

且看五年开发码农,如何备战仨月硬刚字节面试官,轻松拿offer

写在前面 前不久跟几个哥们儿在一起吃喝玩闹,因为都是程序员出身,多少还是会谈谈各自公司的状况,其中一位朋友就是面临着跳槽换工作的情况。虽然做了好几年开发,但还是有很大压力,不光因为此次是想进字节跳动&#xf…

变更控制委员会CCB

在实施整体变更控制过程中,每项记录在案的变更请求都必须由一位责任人批准或否决,这个责任人通常是项目发起人或项目经理。应该在项目管理计划或组织流程中指定这位责任人。必要时,应该由变更控制委员会(CCB)来开展实施…

vue中keep-alive的作用

vue中keep-alive的作用1、什么是keep-alive?2、作用3、使用场景4、基本使用4.1、所有组件都缓存4.2、include:只有包裹的组件名被缓存4.3、exclude:只有包裹的组件名不会被缓存4.4、max:组件最多缓存的数量4.5、结合路由router,缓…

CUDA编程基础:线程标识符计算,以及并行运算原理

1,CUDA编程的基本概念 对于一个2-dim的block(D_x, D_y) ,既指的是二维的平面的block模型; gridDim: 这个变量包含网格的维度 blockIdx: 这个变量包含了网格中的线程块索引(0~gridDim-1) blockDim: 这个变量包含了线程块的维度 threadIdx: 这个变量包含了线程块中的线程索引(…

机器人——力控

力控制背后的基本思想很简单:传感器的输出用于在控制器中闭环,调整每个关节扭矩以匹配所需的输出。在某种程度上,这类似于位置控制。您只需用参考力(来自力/扭矩传感器)替换参考位置(来自电机编码器&#x…

java程序设计笔记 -- 继承与多态

继承与多态 子类 is a 关系 整体与部分 has a extends 继承关键词 父类也叫做 超类 基类 object 类 类层次最高点,是所有类的直接或间接父类 方法 public final Class getClass(): 获取当前对象所属的类信息,返回Class对象public Strig toString (…

计划评审技术

计划评审技术就是把工程项目当成一种系统,用网络图或者表格或者矩阵来表示各项具体工作的先后顺序和相互关系,以时间为中心,找出从开工到完工所需要时间的最长路线,并围绕关键路线对对系统进行统筹规划,合理安排以及对…

python--数据容器--列表

目录 1.python中的数据容器: 2.列表的定义 列表的下标索引 列表的查询功能 (方法) 修改列表的值 在指定位置插入元素 追加元素 追加一批元素 删除元素 删除某个元素在列表中的第一个匹配项 清空列表 统计某元素在列表内的数量 统…

ChIP-Seq,MeRIP-seq峰(peak),eccDNA等染色体分布可视化

人类基因组由1-22、X、Y等染色体构成,染色体经过细胞学处理后会呈现出深浅不同的染色带。 染色带的数目、部位、宽窄和着色深浅均相对稳定性,所以每一条染色体都有固定的分带模式,即称带型。 染色体带型是鉴别染色体的重要依据。图1. 人类染色…