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接口 使用方法: 创建一个接口,继承于ElasticSearchRepository,指定使用的Entity类及对应主键数据类型 Springboot自动扫描接口并创建代…...
【Flutter】Dart:Isolate
在 Dart 和 Flutter 中,所有的代码默认都运行在单一的线程(即主线程)上,这个线程也叫做 UI 线程。当进行耗时操作(如复杂计算或网络请求)时,如果不使用多线程处理,主线程会被阻塞&am…...
微信小程序 页面间传递数据
在小程序中,给页面传递参数通常有以下几种方法: 通过URL传递参数: 在小程序中,可以在页面的路径后面添加参数,然后在页面的 onLoad 函数中获取这些参数。 // 在app.json中配置页面路径 "pages": [{"pat…...
前端_005_Nodejs
文章目录 npm包管理器cjs和mjsYarn包管理器 1.Node.js 是js的一个运行环境,从nodejs诞生后js代码不局限于只在浏览器中执行,此外还能再nodejs里写服务端,用js可以前后端全栈开发 2.Node.js不跟浏览器一样默认含有document,window对象…...
SpringCache缓存介绍
1.为什么需要缓存 前台请求,后台先从缓存中取数据,取到直接返回结果,取不到时从数据库中取,数据库取到更新缓存,并返回结果,数据库也没取到,那直接返回空结果: 使用缓存是一个很…...
python实战(一)——iris鸢尾花数据集分类
一、任务背景 本文是python实战系列专栏的第一篇文章,我们将从分类开始由浅入深逐步学习如何使用python完成常规的机器学习/深度学习任务。iris数据集是经典的机器学习入门数据集,许多分类任务教程都会以这个数据集作为示例,它的数据量是150条…...
k8s-对命名空间资源配额
对k8s命名空间限制的方法有很多种,今天来演示一下很常用的一种 用的k8s对象就是ResourceQuota 一:创建命名空间 kubectl create ns test #namespace命名空间可以简写成ns 二: 对命名空间进行限制 创建resourcequota vim resourcequ…...
Failed to connect to github.com port 443
git push无法连接443端口 **问题1****方法一:取消代理设置**git命令 其他解决方案1. **设置 Git 使用 HTTP 而不是 HTTPS**2. **检查证书**3. **配置 Git 忽略 SSL 验证(不推荐)**4. **检查代理设置** 问题1 Failed to connect to github.com…...
【设计模式系列】简单工厂模式
一、什么是简单工厂模式 简单工厂模式(Simple Factory Pattern)是一种设计模式,其中包含一个工厂类,根据传入的参数不同,返回不同类的实例。这个工厂类封装了对象的创建逻辑,使得客户端代码可以从直接创建…...
给定一个正整数n随机生成n个字节即生成2n个十六进制数将其组成字符串返回secrets.token_hex(n)
【小白从小学Python、C、Java】 【考研初试复试毕业设计】 【Python基础AI数据分析】 给定一个正整数n 随机生成n个字节 即生成2n个十六进制数 将其组成字符串返回 secrets.token_hex(n) [太阳]选择题 根据题目代码,执行的结果错误的是? 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个指示灯(用发光二极管模拟)1. 汽车正常运行时指示灯全灭;2.右转弯时,右侧3个指示灯按右循环顺序点亮;.3. 左转弯时,左侧3个指示灯按左循环顺序点亮;4.临时刹车时所有…...
Leetcode 3326. Minimum Division Operations to Make Array Non Decreasing
Leetcode 3326. Minimum Division Operations to Make Array Non Decreasing 1. 解题思路2. 代码实现 题目链接:3326. Minimum Division Operations to Make Array Non Decreasing 1. 解题思路 这一题的话就是要看出来题中给出的operation的本质事实上就是将任意…...
redo文件误删除后通过逻辑备份进行恢复
问题描述 开发同事让在一个服务器上查找下先前库的备份文件是否存在,如果存在进行下恢复。翻了服务器发现备份文件存在,多愁了一眼竟翻到了该备份文件于2024.6.17日恢复过的日志,赶紧和开发沟通说2024.6.17号已经恢复过了为啥还要恢复&#x…...
7805的输出电压如何调整?
7805稳压集成电路的输出电压通常是固定的,标称为5V。然而,在实际应用中,可以通过一些方法调整其输出电压,尽管这些调整方法可能会使电路变得更加复杂或需要额外的元件。以下是几种可能的调整方法: 1. 使用不同型号的稳…...
git命令使用一览【自用】
git常见操作: 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制造业中企业和控制…...
如何在分布式环境中实现高可靠性分布式锁
目录 一、简单了解分布式锁 (一)分布式锁:应对分布式环境的同步挑战 (二)分布式锁的实现方式 (三)分布式锁的使用场景 (四)分布式锁需满足的特点 二、Redis 实现分…...
Vue基础(4)
自定义指令 除了默认设置的核心指令( v-model 和 v-show ), Vue 也允许注册自定义指令。在vue中使用directive来创建自定义指令 钩子函数 指令定义函数提供了几个钩子函数(可选): bind: 只调用一次,指令第一次绑定到元素时调用&…...
shell脚本--常见案例
1、自动备份文件或目录 2、批量重命名文件 3、查找并删除指定名称的文件: 4、批量删除文件 5、查找并替换文件内容 6、批量创建文件 7、创建文件夹并移动文件 8、在文件夹中查找文件...
关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案
问题描述:iview使用table 中type: "index",分页之后 ,索引还是从1开始,试过绑定后台返回数据的id, 这种方法可行,就是后台返回数据的每个页面id都不完全是按照从1开始的升序,因此百度了下,找到了…...
全球首个30米分辨率湿地数据集(2000—2022)
数据简介 今天我们分享的数据是全球30米分辨率湿地数据集,包含8种湿地亚类,该数据以0.5X0.5的瓦片存储,我们整理了所有属于中国的瓦片名称与其对应省份,方便大家研究使用。 该数据集作为全球首个30米分辨率、覆盖2000–2022年时间…...
oracle与MySQL数据库之间数据同步的技术要点
Oracle与MySQL数据库之间的数据同步是一个涉及多个技术要点的复杂任务。由于Oracle和MySQL的架构差异,它们的数据同步要求既要保持数据的准确性和一致性,又要处理好性能问题。以下是一些主要的技术要点: 数据结构差异 数据类型差异ÿ…...
VTK如何让部分单位不可见
最近遇到一个需求,需要让一个vtkDataSet中的部分单元不可见,查阅了一些资料大概有以下几种方式 1.通过颜色映射表来进行,是最正规的做法 vtkNew<vtkLookupTable> lut; //值为0不显示,主要是最后一个参数,透明度…...
【生成模型】视频生成论文调研
工作清单 上游应用方向:控制、速度、时长、高动态、多主体驱动 类型工作基础模型WAN / WAN-VACE / HunyuanVideo控制条件轨迹控制ATI~镜头控制ReCamMaster~多主体驱动Phantom~音频驱动Let Them Talk: Audio-Driven Multi-Person Conversational Video Generation速…...
网站指纹识别
网站指纹识别 网站的最基本组成:服务器(操作系统)、中间件(web容器)、脚本语言、数据厍 为什么要了解这些?举个例子:发现了一个文件读取漏洞,我们需要读/etc/passwd,如…...
前端中slice和splic的区别
1. slice slice 用于从数组中提取一部分元素,返回一个新的数组。 特点: 不修改原数组:slice 不会改变原数组,而是返回一个新的数组。提取数组的部分:slice 会根据指定的开始索引和结束索引提取数组的一部分。不包含…...
ubuntu系统文件误删(/lib/x86_64-linux-gnu/libc.so.6)修复方案 [成功解决]
报错信息:libc.so.6: cannot open shared object file: No such file or directory: #ls, ln, sudo...命令都不能用 error while loading shared libraries: libc.so.6: cannot open shared object file: No such file or directory重启后报错信息&…...
论文阅读:Matting by Generation
今天介绍一篇关于 matting 抠图的文章,抠图也算是计算机视觉里面非常经典的一个任务了。从早期的经典算法到如今的深度学习算法,已经有很多的工作和这个任务相关。这两年 diffusion 模型很火,大家又开始用 diffusion 模型做各种 CV 任务了&am…...
