【docker】Dockerfile制作基础镜像 python 底层镜像制作 | 打包所有的requirement依赖

本文主要是介绍【docker】Dockerfile制作基础镜像 python 底层镜像制作 | 打包所有的requirement依赖,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、Dockerfile思想

我们正常的对一个项目进行打包 docker image 通常是在CI工具编译时进行对依赖的安装,比如golanggo getpythonpip installnodenpm install 等等

好处:我们更新了依赖可以动态的再编译时进行一个对依赖的更新
坏处:每一次CI时间都很长,浪费大量时间等待发版

下面我们就从2个角度去打包我们自己的Dockerfile

二、两种方式打包

1、合并打包底层依赖

文件目录如下:

在这里插入图片描述

1.1、Dockerfile 文件如下

注意:
1、当前系统和目标系统的不一致时
我们需要指定目标的系统环境:–platform=linux/amd64 (当前我机器为macos)
2、需要requirements.txt文件和Dockerfile在同一个目录中

FROM --platform=linux/amd64 python:3.9.5-slim# Set the working directory in the container
WORKDIR /app# Copy the current directory contents into the container at /app
COPY . /app# 更换 pip 源为阿里云镜像 1
RUN  pip install --no-cache-dir -i https://mirrors.aliyun.com/pypi/simple/ -r requirements.txt

1.2、Requirement.txt文件如下

async-timeout==4.0.3
beautifulsoup4==4.12.2
certifi==2023.11.17
charset-normalizer==3.3.2
colorama==0.4.6
idna==3.6
loguru==0.7.2
mysql-connector-python==8.2.0
numpy==1.26.3
pandas==2.1.4
protobuf==4.21.12
PyMySQL==1.1.0
python-dateutil==2.8.2
pytz==2023.3.post1
redis==5.0.1
requests==2.31.0
schedule==1.2.1
six==1.16.0
soupsieve==2.5
tzdata==2023.4
urllib3==2.1.0
win32-setctime==1.1.0

1.3、进行打包

docker build -t python:3.9-x86-slim-all . 

在这里插入图片描述

1.4、查看镜像

docker images

在这里插入图片描述

1.5、上传至私有镜像仓库(可选)

这里我们使用的是阿里云ACR
需要我们提前在仓库创建好

在这里插入图片描述

将镜像推送到Registry

docker login --username=xxx registry.cn-beijing.aliyuncs.com
docker tag [ImageId] registry.cn-beijing.aliyuncs.com/xxxx/python:[镜像版本号]
docker push registry.cn-beijing.aliyuncs.com/xxxx/python:[镜像版本号]

1.6、最终使用

因为 Requirement都打包在 registry.cn-beijing.aliyuncs.com/xxxx/python:3.9-x86-slim-all里面了,所以我们如果需要更改 Requirement就得重新打包底层的镜像

FROM registry.cn-beijing.aliyuncs.com/xxxx/python:3.9-x86-slim-all# 设置工作目录
WORKDIR /app# 复制当前目录下的所有文件到工作目录
COPY . /app/
COPY ./gansu/x-ticket/spot_trading/sojson.new.json /app/json/sojson.new.json
# 设置APT的环境变量
ENV DEBIAN_FRONTEND=noninteractive# 执行主程序
CMD ["python", "gansu/schedule_task.py"]

共计编译用时 35 秒

在这里插入图片描述

2、拆分打包底层依赖

2.1、常规Dockerfile写法

这样Requirement中的依赖就可以每次在CI编译时都重新安装一遍

 # 使用官方 Python 镜像作为基础镜像
FROM registry.cn-beijing.aliyuncs.com/xxxx/python:3.9-slim# 设置工作目录
WORKDIR /app# 复制当前目录下的所有文件到工作目录
COPY . /app/
COPY ./gansu/x-ticket/spot_trading/sojson.new.json /app/json/sojson.new.json
# 设置APT的环境变量
ENV DEBIAN_FRONTEND=noninteractive# 更换 pip 源为阿里云镜像,并禁用构建隔离
COPY requirements.txt .
RUN pip install --no-cache-dir --default-timeout=500 --disable-pip-version-check --no-build-isolation -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt# 执行主程序
CMD ["python", "gansu/schedule_task.py"]

这篇关于【docker】Dockerfile制作基础镜像 python 底层镜像制作 | 打包所有的requirement依赖的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1062795

相关文章

Python+FFmpeg实现视频自动化处理的完整指南

《Python+FFmpeg实现视频自动化处理的完整指南》本文总结了一套在Python中使用subprocess.run调用FFmpeg进行视频自动化处理的解决方案,涵盖了跨平台硬件加速、中间素材处理... 目录一、 跨平台硬件加速:统一接口设计1. 核心映射逻辑2. python 实现代码二、 中间素材处

Linux镜像文件制作方式

《Linux镜像文件制作方式》本文介绍了Linux镜像文件制作的过程,包括确定磁盘空间布局、制作空白镜像文件、分区与格式化、复制引导分区和其他分区... 目录1.确定磁盘空间布局2.制作空白镜像文件3.分区与格式化1) 分区2) 格式化4.复制引导分区5.复制其它分区1) 挂载2) 复制bootfs分区3)

python中的flask_sqlalchemy的使用及示例详解

《python中的flask_sqlalchemy的使用及示例详解》文章主要介绍了在使用SQLAlchemy创建模型实例时,通过元类动态创建实例的方式,并说明了如何在实例化时执行__init__方法,... 目录@orm.reconstructorSQLAlchemy的回滚关联其他模型数据库基本操作将数据添

Python实现快速扫描目标主机的开放端口和服务

《Python实现快速扫描目标主机的开放端口和服务》这篇文章主要为大家详细介绍了如何使用Python编写一个功能强大的端口扫描器脚本,实现快速扫描目标主机的开放端口和服务,感兴趣的小伙伴可以了解下... 目录功能介绍场景应用1. 网络安全审计2. 系统管理维护3. 网络故障排查4. 合规性检查报错处理1.

Python轻松实现Word到Markdown的转换

《Python轻松实现Word到Markdown的转换》在文档管理、内容发布等场景中,将Word转换为Markdown格式是常见需求,本文将介绍如何使用FreeSpire.DocforPython实现... 目录一、工具简介二、核心转换实现1. 基础单文件转换2. 批量转换Word文件三、工具特性分析优点局

Python中4大日志记录库比较的终极PK

《Python中4大日志记录库比较的终极PK》日志记录框架是一种工具,可帮助您标准化应用程序中的日志记录过程,:本文主要介绍Python中4大日志记录库比较的相关资料,文中通过代码介绍的非常详细,... 目录一、logging库1、优点2、缺点二、LogAid库三、Loguru库四、Structlogphp

Java利用Spire.Doc for Java实现在模板的基础上创建Word文档

《Java利用Spire.DocforJava实现在模板的基础上创建Word文档》在日常开发中,我们经常需要根据特定数据动态生成Word文档,本文将深入探讨如何利用强大的Java库Spire.Do... 目录1. Spire.Doc for Java 库介绍与安装特点与优势Maven 依赖配置2. 通过替换

C++,C#,Rust,Go,Java,Python,JavaScript的性能对比全面讲解

《C++,C#,Rust,Go,Java,Python,JavaScript的性能对比全面讲解》:本文主要介绍C++,C#,Rust,Go,Java,Python,JavaScript性能对比全面... 目录编程语言性能对比、核心优势与最佳使用场景性能对比表格C++C#RustGoJavapythonjav

Python海象运算符:=的具体实现

《Python海象运算符:=的具体实现》海象运算符又称​​赋值表达式,Python3.8后可用,其核心设计是在表达式内部完成变量赋值并返回该值,从而简化代码逻辑,下面就来详细的介绍一下如何使用,感兴趣... 目录简介​​条件判断优化循环控制简化​推导式高效计算​正则匹配与数据提取​性能对比简介海象运算符

python项目环境切换的几种实现方式

《python项目环境切换的几种实现方式》本文主要介绍了python项目环境切换的几种实现方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录1. 如何在不同python项目中,安装不同的依赖2. 如何切换到不同项目的工作空间3.创建项目