当前位置: 首页 > news >正文

Docker 构建 Miniconda3 Python 运行环境实战指南

Docker 构建 Miniconda3 Python 运行环境实战指南

文章目录

  • Docker 构建 Miniconda3 Python 运行环境实战指南
      • 一 准备 environment.yml
      • 二 获取项目 pip 信息
      • 三 Dockerfile 编写
      • 四 构建多平台镜像
        • 1 准备组件
        • 2 构建镜像
        • 3 导出镜像
        • 4 导入镜像
      • 五 注意事项

本文详细介绍了如何通过 Docker 构建 Miniconda3 的 Python 运行环境,并适用于多平台的镜像构建。首先,通过 environment.yml 文件导出和编辑 Conda 环境配置。接着,演示了如何通过 requirements.txt 文件获取项目依赖,并将其配置到 Docker 镜像中。本文还提供了具体的 Dockerfile 编写步骤,以确保通过 Miniconda 创建和管理 Python 环境。最后,展示了如何使用 Docker Buildx 工具构建适用于不同平台(如 amd64、arm64)的多平台镜像,并导入导出镜像文件,方便部署和分享应用程序。

预备课

Docker 安装与配置:从入门到部署

Docker 镜像的构建与多架构支持

一 准备 environment.yml

导出当前环境配置

# 导出当前的 Conda 环境配置
$ conda env export > environment.yml
# 排除某些包(比如依赖系统的包),可以添加 --no-builds 选项来忽略包
$ conda env export --no-builds > environment.yml
# 导出来的挺复杂的,可能含有大量不需要的测试包。

也可以手动编辑 environment.yml。

name: yourcondaenv
channels:- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main- conda-forge- defaults
dependencies:- python=3.10- pip:- numpy==1.26.4- pandas==2.2.3- matplotlib==3.9.2- scikit-learn==1.5.2- xgboost==2.1.1- lightgbm==4.5.0- numba==0.60.0- seaborn==0.13.2- requests==2.32.3
prefix: /opt/conda/envs/yourcondaenv

python 的版本实际项目选择。

二 获取项目 pip 信息

手动编辑 environment.yml,获取项目 pip 信息,将配置导入 requirements.txt 文件中。

$ pip freeze > requirements.txt

举例,项目的 requirements.txt 信息为

  - numpy==1.26.4- pandas==2.2.3- matplotlib==3.9.2- scikit-learn==1.5.2- xgboost==2.1.1- lightgbm==4.5.0- numba==0.60.0- seaborn==0.13.2- requests==2.32.3

把这个信息复制粘贴到 environment.yml 中的 pip 下。

三 Dockerfile 编写

假如当前目录结构是这样的

app
|
|---src    # 开发目录
|     |---your 目录
|---.dockerignore   
|
|---Dockerfile   
|
|---environment.yml 
|
|---main.py   
|
|---requirements.txt	 

请在 app 目录下构建以下 Dockerfile 文件

# 使用官方 Miniconda 运行时作为基础镜像,版本为 24.7.1-0
FROM continuumio/miniconda3:24.7.1-0# 设置环境变量 LANG 为中文 UTF-8 编码
ENV LANG zh_CN.UTF-8# 在系统的 profile 文件中添加 LANG 的环境变量,确保 shell 会话中应用该设置
RUN echo "export LANG=zh_CN.UTF-8" >> /etc/profile# 设置工作目录为 /app,后续的操作都会在该目录下进行
WORKDIR /app# 将当前目录下的所有文件复制到容器中的 /app 目录,通常包括应用程序代码
COPY . /app# 将 environment.yml 文件复制到容器中,以便后续用于创建 Conda 环境
COPY environment.yml .# 使用 conda 根据 environment.yml 创建环境,并清理不必要的文件
RUN conda env create -f environment.yml && conda clean -a -y && rm environment.yml# 指定使用 conda 环境 'yourcondaenv' 的 shell,以便在容器内执行命令
SHELL ["conda", "run", "-n", "yourcondaenv", "/bin/bash", "-c"]# 暴露端口 8193,使容器的该端口可以被外部访问,通常用于 Web 服务
EXPOSE 8193# 容器启动时执行的命令,首先激活 Conda 环境,然后运行应用程序主文件 main.py
ENTRYPOINT ["bash", "-c", "source activate yourcondaenv && python /app/main.py"]

四 构建多平台镜像

1 准备组件

安装 buildx(如果已安装请跳过),举例 操作系统为 centos 7.9 如下

sudo yum install docker-buildx-plugin
2 构建镜像

构建多平台镜像语法如下

$ docker buildx build --platform your平台 -t 镜像名:版本 .

举例,构建 amd64 和 arm64 平台镜像

# 构建 amd64 架构镜像
docker buildx build --platform linux/amd64 -t yourproj:1.0.4 .
# 构建 arm64 架构镜像
docker buildx build --platform linux/arm64 -t yourproj:1.0.4 .
3 导出镜像
docker save -o your-proj.tar yourproj:1.0.4
4 导入镜像
docker load < your-proj.tar

五 注意事项

构建出来的镜像根据实际情况 size 大小不一,可能会很大,构建时间长。

相关文章:

Docker 构建 Miniconda3 Python 运行环境实战指南

Docker 构建 Miniconda3 Python 运行环境实战指南 文章目录 Docker 构建 Miniconda3 Python 运行环境实战指南一 准备 environment.yml二 获取项目 pip 信息三 Dockerfile 编写四 构建多平台镜像1 准备组件2 构建镜像3 导出镜像4 导入镜像 五 注意事项 本文详细介绍了如何通过 …...

029 elasticsearch文档管理(ElasticsearchRepository、ElasticsearchRestTemplate)

文章目录 BlogRepository.javaBlogRepositoryTest.javaBulkTest.java 文档的管理 ElasticSearchRepository接口 使用方法&#xff1a; 创建一个接口&#xff0c;继承于ElasticSearchRepository&#xff0c;指定使用的Entity类及对应主键数据类型 Springboot自动扫描接口并创建代…...

【Flutter】Dart:Isolate

在 Dart 和 Flutter 中&#xff0c;所有的代码默认都运行在单一的线程&#xff08;即主线程&#xff09;上&#xff0c;这个线程也叫做 UI 线程。当进行耗时操作&#xff08;如复杂计算或网络请求&#xff09;时&#xff0c;如果不使用多线程处理&#xff0c;主线程会被阻塞&am…...

​微信小程序 页面间传递数据

在小程序中&#xff0c;给页面传递参数通常有以下几种方法&#xff1a; 通过URL传递参数&#xff1a; 在小程序中&#xff0c;可以在页面的路径后面添加参数&#xff0c;然后在页面的 onLoad 函数中获取这些参数。 // 在app.json中配置页面路径 "pages": [{"pat…...

前端_005_Nodejs

文章目录 npm包管理器cjs和mjsYarn包管理器 1.Node.js 是js的一个运行环境&#xff0c;从nodejs诞生后js代码不局限于只在浏览器中执行&#xff0c;此外还能再nodejs里写服务端&#xff0c;用js可以前后端全栈开发 2.Node.js不跟浏览器一样默认含有document,window对象&#xf…...

SpringCache缓存介绍

1.为什么需要缓存 ​ 前台请求&#xff0c;后台先从缓存中取数据&#xff0c;取到直接返回结果&#xff0c;取不到时从数据库中取&#xff0c;数据库取到更新缓存&#xff0c;并返回结果&#xff0c;数据库也没取到&#xff0c;那直接返回空结果&#xff1a; 使用缓存是一个很…...

python实战(一)——iris鸢尾花数据集分类

一、任务背景 本文是python实战系列专栏的第一篇文章&#xff0c;我们将从分类开始由浅入深逐步学习如何使用python完成常规的机器学习/深度学习任务。iris数据集是经典的机器学习入门数据集&#xff0c;许多分类任务教程都会以这个数据集作为示例&#xff0c;它的数据量是150条…...

k8s-对命名空间资源配额

对k8s命名空间限制的方法有很多种&#xff0c;今天来演示一下很常用的一种 用的k8s对象就是ResourceQuota 一&#xff1a;创建命名空间 kubectl create ns test #namespace命名空间可以简写成ns 二&#xff1a; 对命名空间进行限制 创建resourcequota vim resourcequ…...

Failed to connect to github.com port 443

git push无法连接443端口 **问题1****方法一&#xff1a;取消代理设置**git命令 其他解决方案1. **设置 Git 使用 HTTP 而不是 HTTPS**2. **检查证书**3. **配置 Git 忽略 SSL 验证&#xff08;不推荐&#xff09;**4. **检查代理设置** 问题1 Failed to connect to github.com…...

【设计模式系列】简单工厂模式

一、什么是简单工厂模式 简单工厂模式&#xff08;Simple Factory Pattern&#xff09;是一种设计模式&#xff0c;其中包含一个工厂类&#xff0c;根据传入的参数不同&#xff0c;返回不同类的实例。这个工厂类封装了对象的创建逻辑&#xff0c;使得客户端代码可以从直接创建…...

给定一个正整数n随机生成n个字节即生成2n个十六进制数将其组成字符串返回secrets.token_hex(n)

【小白从小学Python、C、Java】 【考研初试复试毕业设计】 【Python基础AI数据分析】 给定一个正整数n 随机生成n个字节 即生成2n个十六进制数 将其组成字符串返回 secrets.token_hex(n) [太阳]选择题 根据题目代码&#xff0c;执行的结果错误的是&#xff1f; import secrets …...

[Gtk] 工程

MediaPlayer 可执行文件工程 结构 . ├── BUILD ├── ButtonHelper.cpp ├── ButtonHelper.h ├── CMakeLists.txt ├── DrawingAreaHelper.cpp ├── DrawingAreaHelper.h ├── layout.ui └── main.cpp CMakeLists.txt # 1) cmake basic cmake_minimum_r…...

基于Multisim的汽车尾灯控制电路设计与仿真

假设汽车尾部左右量测各有3个指示灯&#xff08;用发光二极管模拟&#xff09;1. 汽车正常运行时指示灯全灭&#xff1b;2.右转弯时&#xff0c;右侧3个指示灯按右循环顺序点亮&#xff1b;.3. 左转弯时&#xff0c;左侧3个指示灯按左循环顺序点亮&#xff1b;4.临时刹车时所有…...

Leetcode 3326. Minimum Division Operations to Make Array Non Decreasing

Leetcode 3326. Minimum Division Operations to Make Array Non Decreasing 1. 解题思路2. 代码实现 题目链接&#xff1a;3326. Minimum Division Operations to Make Array Non Decreasing 1. 解题思路 这一题的话就是要看出来题中给出的operation的本质事实上就是将任意…...

redo文件误删除后通过逻辑备份进行恢复

问题描述 开发同事让在一个服务器上查找下先前库的备份文件是否存在&#xff0c;如果存在进行下恢复。翻了服务器发现备份文件存在&#xff0c;多愁了一眼竟翻到了该备份文件于2024.6.17日恢复过的日志&#xff0c;赶紧和开发沟通说2024.6.17号已经恢复过了为啥还要恢复&#x…...

7805的输出电压如何调整?

7805稳压集成电路的输出电压通常是固定的&#xff0c;标称为5V。然而&#xff0c;在实际应用中&#xff0c;可以通过一些方法调整其输出电压&#xff0c;尽管这些调整方法可能会使电路变得更加复杂或需要额外的元件。以下是几种可能的调整方法&#xff1a; 1. 使用不同型号的稳…...

git命令使用一览【自用】

git常见操作&#xff1a; git initgit remote add master【分支名字】 gitgits.xxxxx【仓库中获取的ssh链接或者http协议的链接】检查远程仓库是否链接成功。 git remote -v出现以下画面就可以git pull,git push了...

MES系列-报表和分析

MES系列-报表和分析 MES系列文章目录 ISA-95制造业中企业和控制系统的集成的国际标准-(1) ISA-95制造业中企业和控制系统的集成的国际标准-(2) ISA-95制造业中企业和控制系统的集成的国际标准-(3) ISA-95制造业中企业和控制系统的集成的国际标准-(4) ISA-95制造业中企业和控制…...

如何在分布式环境中实现高可靠性分布式锁

目录 一、简单了解分布式锁 &#xff08;一&#xff09;分布式锁&#xff1a;应对分布式环境的同步挑战 &#xff08;二&#xff09;分布式锁的实现方式 &#xff08;三&#xff09;分布式锁的使用场景 &#xff08;四&#xff09;分布式锁需满足的特点 二、Redis 实现分…...

Vue基础(4)

自定义指令 除了默认设置的核心指令( v-model 和 v-show ), Vue 也允许注册自定义指令。在vue中使用directive来创建自定义指令 钩子函数 指令定义函数提供了几个钩子函数&#xff08;可选&#xff09;&#xff1a; bind: 只调用一次&#xff0c;指令第一次绑定到元素时调用&…...

Redis高阶篇之Redis单线程与多线程

文章目录 0 前言1. 为什么Redis是单线程&#xff1f;1.1 Redis单线程1.2 为什么Redis3时代单线程快的原因1.3 使用单线程原因 2.为什么逐渐加入多线程呢&#xff1f;2.1 如何解决 3.redis6/7的多线程特性和IO多路复用入门3.1主线程和IO线程怎么协作完成请求处理的3.2 Unix网络编…...

【C++】STL——priority_queue优先级队列

目录 前言priority_queue的使用简单使用在OJ中的使用 priority_queue的模拟实现基本功能仿函数在这里插入图片描述 前言 上一节我们说了stack和queue这两种容器适配器&#xff0c;而priority_queue&#xff08;优先级队列&#xff09;同样也是属于容器适配器&#xff0c;它会优…...

大数据新视界 --大数据大厂之大数据在智慧城市建设中的应用:打造智能生活的基石

&#x1f496;&#x1f496;&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎你们来到 青云交的博客&#xff01;能与你们在此邂逅&#xff0c;我满心欢喜&#xff0c;深感无比荣幸。在这个瞬息万变的时代&#xff0c;我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…...

使用枚举来实现策略模式

使用很多if else的场景 public void save(String type,Object data){if("db".equals(type)){saveInDb(data);}else if("file".equals(type)){saveInFile(data);}else if("oss".equals(type)){saveInOss(data);}}使用枚举来解决 public enum Save…...

区块链技术原理

1. 引言 区块链的定义 区块链是一种分布式账本技术&#xff08;Distributed Ledger Technology&#xff0c;DLT&#xff09;&#xff0c;其核心特征是通过密码学的方式将数据打包成一个个区块&#xff0c;按时间顺序依次相连&#xff0c;形成一个不可篡改、公开透明的链式数据…...

Spring Boot 接口数据加解密

今天聊下接口安全问题&#xff0c;涉及到接口的加密和解密 经常和外部单位接口调用梳理了相关技术方案&#xff0c;主要的需求点如下&#xff1a; 1&#xff0c;尽量少改动&#xff0c;不影响之前的业务逻辑 2&#xff0c;考虑到时间紧迫性&#xff0c;可采用对称性加密方式&…...

2018年计算机网络408真题解析

第一题&#xff1a; 解析&#xff1a;TCP/IP体系结构应用层常用协议及其相应的运输层协议 TCP协议是面向连接可靠数据传输服务&#xff0c;UDP无连接不可靠的数据传输服务&#xff0c;IP无连接不可靠的数据连接服务。 FTP协议&#xff0c;SMTP协议和HTTP协议使用TCP协议提供的面…...

Javascript 脚本查找B站限时免费番剧

目录 前言 脚本编写 脚本 前言 B站的一些番剧时不时会“限时免费”&#xff0c;白嫖党最爱&#xff0c;主打一个又占到便宜的快乐。但是在番剧索引里却没有搜索选项可以直接检索“限时免费”的番剧&#xff0c;只能自己一页一页的翻去查看&#xff0c;非常麻烦。 自己找限…...

YoloV10改进策略:主干网络改进|DeBiFormer,可变形双级路由注意力|全网首发

摘要 在目标检测领域,YoloV10以其高效和准确的性能而闻名。然而,为了进一步提升其检测能力,我们引入了DeBiFormer作为YoloV10的主干网络。这个主干网络的计算量比较大,不过,上篇双级路由注意力的论文受到很大的关注,所以我也将这篇论文中的主干网络用来改进YoloV10,卡多…...

C#学习笔记(一)

C#学习笔记&#xff08;一&#xff09; 简介第一章 上位机开发环境之 VS 使用和.NET 平台基础一、安装软件二、创建项目三、第一个Hello world四、解决方案与项目五、Debug 和 Release 的区别六、代码的生产过程七、CLR的其它功能 简介 C# .NET工控上位机开发 在工控领域&…...