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

embedded/2024/10/21 18:17:49/

Miniconda3_Python__0">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__70">三 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 大小不一,可能会很大,构建时间长。


http://www.ppmy.cn/embedded/129328.html

相关文章

mysql 备份与恢复

目录 一、备份分类与方法 1.1 备份类型 1.2 备份策略 1.3 备份工具 二、完全备份与恢复 2.1 物理冷备 2.2 mysqldump逻辑热 备 &#xff08;1&#xff09;完全备份一个或多个完整的库&#xff08;包括其中所有的表&#xff09; &#xff08;2&#xff09;完全备份 My…

(linux驱动学习 - 12). IIC 驱动实验

一.IIC 总线驱动相关结构体与函数 1.i2c_adapter 结构体 struct i2c_adapter {struct module *owner;unsigned int class; /* classes to allow probing for */const struct i2c_algorithm *algo; /* 总线访问算法 */void *algo_data;/* data fields that…

如何使用gitlab切换分支

第一步&#xff0c;在gitlab上新建一个远程分支。选择New branch即可新建一个&#xff0c;但是注意往往是在当前分支下新建的分支&#xff0c;所以新分支里会有当前分支的内容。 第二步&#xff0c;在本地当前分支在运行这三行命令&#xff0c;即可得到一个空的新分支。 git c…

GB28181协议视频监控平台-核心信令的含义

核心信令&#xff08;Core Signaling&#xff09;在通信系统中指的是用于控制和管理通信过程的信令协议和机制。这些信令通常涉及到在网络中的设备&#xff08;如基站、交换机、路由器等&#xff09;之间传递控制信息&#xff0c;以便实现建立、维护和终止通信会话的功能。 核…

go 包相关知识

在Go语言中&#xff0c;包的引用和搜索路径是由环境变量GOPATH和GO111MODULE共同决定的。 GOPATH环境变量&#xff1a;这个变量定义了默认的工作目录&#xff0c;Go命令行工具将会在这个目录下查找包文件。这个目录通常包含三个子目录&#xff1a;src、bin和pkg。 src目录包含…

C语言[经典题——4×5矩形阵]

输出45的矩形阵 用for循环输出1&#xff5e;20数字摆出45的矩形阵 两个for循环嵌套使用&#xff0c;当外部的for循环输出一位&#xff0c;内部小的for循环就整个输出&#xff0c;直到外部的for循环输出完毕&#xff0c;在搭配if实现分行。 #include <stdio.h> int main()…

openSSL生成WEB SSL证书

1.使用openSSL生成凭证与私钥&#xff1a; openssl genrsa -out privatekey.pem 2048 openssl req -new -key privatekey.pem -out cert_req.pemCountry Name (2 letter code) [AU]:cn State or Province Name (full name) [Some-State]:sh Locality Name (eg, city) []:sh Or…

Artillery:强大的API负载测试工具

在现代软件开发中&#xff0c;API&#xff08;应用程序编程接口&#xff09;已成为连接不同服务和应用的核心组件。随着API的普及&#xff0c;确保其性能和稳定性变得至关重要。负载测试是评估API在高并发情况下表现的重要手段之一。在众多负载测试工具中&#xff0c;Artillery…