【Docker】docker部署conda并激活环境

原文作者:我辈李想
版权声明:文章原创,转载时请务必加上原文超链接、作者信息和本声明。


文章目录

  • 前言
  • 一、新建dockerfile文件
  • 二、使用build创建镜像
    • 1.报错:Your shell has not been properly configured to use 'conda activate'.
    • 2.报错:source - not found
  • 三、使用run启动并进入容器
  • 四、检查虚拟环境是否激活,并安装了包
  • 五、通过conda参数实现安装python包


前言

在使用docker的过程中,跟着官方文档或各种教程都是很顺利的,在实际项目中,我碰到了一个docker部署conda镜像容器,实际程序是在虚拟环境slab中,不是base。项目是我从其他人手中接过来的,每次更新docker镜像时,都是pull镜像、run进入容器,更新环境,commit、push仓库。一直有个不一样的想法在冲击我,能不能直接用dockerfile创建镜像,然后直接push仓库。现在就有了这篇博客。


一、新建dockerfile文件

创建Dockerfile_conda文件,我们已经按照docker配置写入相关命令,内容如下:

FROM continuumio/miniconda3 AS base
WORKDIR /slabENV PATH /opt/conda/envs/slab/bin:$PATH
# 创建slab环境
RUN conda create --name slab python=3.9 
# 激活slab环境
RUN conda activate slab
# 安装python库
RUN pip install -i https://pypi.tuna.tsinghua.edu.cn/simple \uvicorn fastapi python-dotenv redis requests pymysql pandas \jsonpath sqlalchemy python-docx cx_Oracle schedule rabbitpy \pika python-multipart openpyxl superstream

主要关注RUN的三个命令,这是我们正常使用conda的命令。

二、使用build创建镜像

docker build -t pika_conda -f Dockerfile_conda .

因为dockerfile配置问题,这个无法创建镜像

1.报错:Your shell has not been properly configured to use ‘conda activate’.

这个报错我们仔细看时让我们使用conda init **,如果是在linux系统,可以这么干,但是在docker容器中,这个命令无效
在这里插入图片描述
我参考了这篇博客,在dockerfile中加入一条命令,现在dockerfile内容如下:

FROM continuumio/miniconda3 AS base
WORKDIR /slabENV PATH /opt/conda/envs/slab/bin:$PATH
# 创建slab环境
RUN conda create --name slab python=3.9 
# 激活slab环境
RUN source activate slab
# RUN conda activate slab
# 安装python库
RUN pip install -i https://pypi.tuna.tsinghua.edu.cn/simple \uvicorn fastapi python-dotenv redis requests pymysql pandas \jsonpath sqlalchemy python-docx cx_Oracle schedule rabbitpy \pika python-multipart openpyxl superstream

2.报错:source - not found

现在还不能确定虚拟环境是否激活成功,因为我们是docker镜像,无法直接使用source。我有找了一篇博客,现在dockerfile内容如下:

FROM continuumio/miniconda3 AS base
WORKDIR /slabENV PATH /opt/conda/envs/slab/bin:$PATH
# 创建slab环境
RUN conda create --name slab python=3.9 
# 激活slab环境
RUN /bin/bash -c "source activate slab"
# RUN conda activate slab
# 安装python库
RUN pip install -i https://pypi.tuna.tsinghua.edu.cn/simple \uvicorn fastapi python-dotenv redis requests pymysql pandas \jsonpath sqlalchemy python-docx cx_Oracle schedule rabbitpy \pika python-multipart openpyxl superstream

现在的dockerfile已经可以成功创建镜像了。

三、使用run启动并进入容器

docker run -it --name myconda_test pika_conda:latest /bin/bash

这里有个问题,虽然我们进入了容器,但是默认激活的环境还是base
在这里插入图片描述我们还需要修改dockerfile文件,内容如下:

FROM continuumio/miniconda3 AS base
WORKDIR /slabENV PATH /opt/conda/envs/slab/bin:$PATH
# 创建slab环境
RUN conda create --name slab python=3.9 
# 激活slab环境
RUN /bin/bash -c "source activate slab"
# RUN conda activate slab
# 激活默认环境
RUN echo "conda activate slab" >> ~/.bashrc
# 安装python库
RUN pip install -i https://pypi.tuna.tsinghua.edu.cn/simple \uvicorn fastapi python-dotenv redis requests pymysql pandas \jsonpath sqlalchemy python-docx cx_Oracle schedule rabbitpy \pika python-multipart openpyxl superstream

在这里插入图片描述
网络上有将conda activate slab放在CMD中,也可以实现上述的效果,但是这样有一个风险。我们这个镜像最终会被其他dockerfile文件from,新的dockerfile中也存在CMD,可能被覆盖。

四、检查虚拟环境是否激活,并安装了包

在容器中,我们直接使用pip list 查看python的三方包,我们可以看到已经成功安装了。
在这里插入图片描述
最后我整理了一下dockerfile的内容,下面的是最终版文件。

FROM continuumio/miniconda3 AS base
WORKDIR /slabENV PATH /opt/conda/envs/slab/bin:$PATHRUN conda create --name slab python=3.9 \&& /bin/bash -c "source activate slab" \&& echo "conda activate slab" >> ~/.bashrc \&& pip install -i https://pypi.tuna.tsinghua.edu.cn/simple \uvicorn fastapi python-dotenv redis requests pymysql pandas \jsonpath sqlalchemy python-docx cx_Oracle schedule rabbitpy \pika python-multipart openpyxl superstream

五、通过conda参数实现安装python包

通过上文,我们是按照正常的conda使用路线完成了python包安装至指定虚拟环境。因为pip默认是直接安装至base环境,我们可以通过需改conda设置,实现包安装至slab,这是一个环境变量CONDA_DEFAULT_ENV。dockerfile的终版内容如下:

FROM continuumio/miniconda3 AS base
WORKDIR /slabENV PATH /opt/conda/envs/slab/bin:$PATH
ENV CONDA_DEFAULT_ENV $slabRUN conda create --name slab python=3.9 \&& echo "conda activate slab" >> ~/.bashrc \&& pip install -i https://pypi.tuna.tsinghua.edu.cn/simple \uvicorn fastapi python-dotenv redis requests pymysql pandas \jsonpath sqlalchemy python-docx cx_Oracle schedule rabbitpy \pika python-multipart openpyxl superstream xlsxwriter pytest

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/329679.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C练习——鸡兔同笼

题目: 有若干只鸡和兔子在同一个笼子里,从上面数,有98个头;从下面数,有386只脚。问笼中各有几只鸡和兔? 解析: 数学上列二元一次方程组求解,所以采用穷举法,但可以缩小…

阿里云服务器ECS入门与基础运维

一、云服务器简介 1、服务器: (1) 概念: 服务器本身就是一种电脑,同样具备CPU、内存、硬盘、网卡、电源等硬件。 互联网对外提供网站、游戏、在线会议、网盘等服务,都需要将这些互联网服务部署到服务器中。 (2) 特点&#xf…

Java二叉树的遍历以及最大深度问题

Java学习面试指南:https://javaxiaobear.cn 1、树的相关概念 1、树的基本定义 树是我们计算机中非常重要的一种数据结构,同时使用树这种数据结构,可以描述现实生活中的很多事物,例如家谱、单位的组织架构、等等。 树是由n&#…

支付宝扫码(Easy版)支付实现

文章目录 一 技术准备1.1 二维码技术(java)1.2 支付宝沙箱环境准备1.3 内网穿透 二 支付宝支付相关知识2.1 各种支付方式2.2 扫码付接入流程2.3 系统交互流程(时序图)2.4 加密逻辑 三 扫码支付实现3.1 添加maven依赖(Easy版)3.2 完…

图神经网络|9.3 邻接矩阵的变换

由于邻接矩阵中一般不会(i,i)等于1,除非第i个点上有自环。 而如果用邻接矩阵去乘上特征矩阵,那么将丢失自身向自身的贡献。 此时可以再邻接矩阵的基础上,再加上一个单位阵,从而使得最终的结果包含自身对整体…

VS2017 CMake编译Opencv

先下载opencv4.2.0源码以及opencv_contrib-4.2.0 地址链接:https://pan.baidu.com/s/1AgFsiH4uMqTRJftNXAqmTw?pwd3663 提取码:3663 先建立一个opencv_debug和opencv_release文件夹这两个都是为了后续存放编译好的debug版本和release版本opencv的&#…

mnn-llm: 大语言模型端侧CPU推理优化

在大语言模型(LLM)端侧部署上,基于 MNN 实现的 mnn-llm 项目已经展现出业界领先的性能,特别是在 ARM 架构的 CPU 上。目前利用 mnn-llm 的推理能力,qwen-1.8b在mnn-llm的驱动下能够在移动端达到端侧实时会话的能力,能够在较低内存…

解决 Postman 报错问题:一份综合指南

Postman 是一个流行的 API 测试工具,它可以帮助开发者和测试人员快速地创建和发送各种 HTTP 请求,并查看响应结果。但是,在使用 Postman 的过程中,有时候会遇到一些报错或异常情况,影响了正常的测试流程。本文将介绍一…

PHP代码审计之实战审代码篇2

4. 仔细观察如下代码&#xff0c;思考代码有什么缺陷&#xff0c;可能由此引发什么样的问题&#xff1f; <?php require_once("/home/rconfig/classes/usersession.class.php"); require_once("/home/rconfig/classes/ADLog.class.php"); require_onc…

Python怎么修改进程名称

目录 一、进程名称的概念 二、Python修改进程名称的方法 三、代码示例与使用说明 四、注意事项 五、适用场景 六、总结 Python是一种强大的编程语言&#xff0c;广泛应用于各种应用程序的开发。在Python中&#xff0c;修改进程名称可以通过多种方式实现。下面我们将深入探…

密码学中的Hash函数

目录 一. 介绍 二. hash函数的五个基本性质 &#xff08;&#xff11;&#xff09;压缩性 &#xff08;&#xff12;&#xff09;正向计算简单性 &#xff08;&#xff13;&#xff09;逆向计算困难性 &#xff08;&#xff14;&#xff09;弱无碰撞性 &#xff08;&…

3D点云上的深度学习综述

1 Title Deep Learning for 3D Point Clouds: A Survey&#xff08;Yulan Guo; Hanyun Wang; Qingyong Hu; Hao Liu; Li Liu; Mohammed Bennamoun&#xff09;【IEEE Transactions on Pattern Analysis and Machine Intelligence 2020】 2 Conclusion Deep learning on point…