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: 只调用一次,指令第一次绑定到元素时调用&…...

eNSP-Cloud(实现本地电脑与eNSP内设备之间通信)
说明: 想象一下,你正在用eNSP搭建一个虚拟的网络世界,里面有虚拟的路由器、交换机、电脑(PC)等等。这些设备都在你的电脑里面“运行”,它们之间可以互相通信,就像一个封闭的小王国。 但是&#…...

大数据学习栈记——Neo4j的安装与使用
本文介绍图数据库Neofj的安装与使用,操作系统:Ubuntu24.04,Neofj版本:2025.04.0。 Apt安装 Neofj可以进行官网安装:Neo4j Deployment Center - Graph Database & Analytics 我这里安装是添加软件源的方法 最新版…...

Qt/C++开发监控GB28181系统/取流协议/同时支持udp/tcp被动/tcp主动
一、前言说明 在2011版本的gb28181协议中,拉取视频流只要求udp方式,从2016开始要求新增支持tcp被动和tcp主动两种方式,udp理论上会丢包的,所以实际使用过程可能会出现画面花屏的情况,而tcp肯定不丢包,起码…...
树莓派超全系列教程文档--(62)使用rpicam-app通过网络流式传输视频
使用rpicam-app通过网络流式传输视频 使用 rpicam-app 通过网络流式传输视频UDPTCPRTSPlibavGStreamerRTPlibcamerasrc GStreamer 元素 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 使用 rpicam-app 通过网络流式传输视频 本节介绍来自 rpica…...
【解密LSTM、GRU如何解决传统RNN梯度消失问题】
解密LSTM与GRU:如何让RNN变得更聪明? 在深度学习的世界里,循环神经网络(RNN)以其卓越的序列数据处理能力广泛应用于自然语言处理、时间序列预测等领域。然而,传统RNN存在的一个严重问题——梯度消失&#…...

什么是库存周转?如何用进销存系统提高库存周转率?
你可能听说过这样一句话: “利润不是赚出来的,是管出来的。” 尤其是在制造业、批发零售、电商这类“货堆成山”的行业,很多企业看着销售不错,账上却没钱、利润也不见了,一翻库存才发现: 一堆卖不动的旧货…...
python爬虫:Newspaper3k 的详细使用(好用的新闻网站文章抓取和解析的Python库)
更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、Newspaper3k 概述1.1 Newspaper3k 介绍1.2 主要功能1.3 典型应用场景1.4 安装二、基本用法2.2 提取单篇文章的内容2.2 处理多篇文档三、高级选项3.1 自定义配置3.2 分析文章情感四、实战案例4.1 构建新闻摘要聚合器…...

ardupilot 开发环境eclipse 中import 缺少C++
目录 文章目录 目录摘要1.修复过程摘要 本节主要解决ardupilot 开发环境eclipse 中import 缺少C++,无法导入ardupilot代码,会引起查看不方便的问题。如下图所示 1.修复过程 0.安装ubuntu 软件中自带的eclipse 1.打开eclipse—Help—install new software 2.在 Work with中…...
大语言模型(LLM)中的KV缓存压缩与动态稀疏注意力机制设计
随着大语言模型(LLM)参数规模的增长,推理阶段的内存占用和计算复杂度成为核心挑战。传统注意力机制的计算复杂度随序列长度呈二次方增长,而KV缓存的内存消耗可能高达数十GB(例如Llama2-7B处理100K token时需50GB内存&a…...

DBLP数据库是什么?
DBLP(Digital Bibliography & Library Project)Computer Science Bibliography是全球著名的计算机科学出版物的开放书目数据库。DBLP所收录的期刊和会议论文质量较高,数据库文献更新速度很快,很好地反映了国际计算机科学学术研…...