做系统去哪个网站,潍坊制作网站,做cp和网站运营,网络设计方法有哪些原文作者#xff1a;我辈李想 版权声明#xff1a;文章原创#xff0c;转载时请务必加上原文超链接、作者信息和本声明。 文章目录 前言一、新建dockerfile文件二、使用build创建镜像1.报错#xff1a;Your shell has not been properly configured to use conda activate.… 原文作者我辈李想 版权声明文章原创转载时请务必加上原文超链接、作者信息和本声明。 文章目录 前言一、新建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 python3.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 python3.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 superstream2.报错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 python3.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 python3.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 python3.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 python3.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