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

这篇具有很好参考价值的文章主要介绍了【Docker】dockerfile部署conda并激活环境。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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



前言

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


一、新建dockerfile文件

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

FROM continuumio/miniconda3 AS base
WORKDIR /slab

ENV 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容器中,这个命令无效
docker conda,CI/CD,docker,conda,容器
我参考了这篇博客,在dockerfile中加入一条命令,现在dockerfile内容如下:

FROM continuumio/miniconda3 AS base
WORKDIR /slab

ENV 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 /slab

ENV 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
docker conda,CI/CD,docker,conda,容器我们还需要修改dockerfile文件,内容如下:

FROM continuumio/miniconda3 AS base
WORKDIR /slab

ENV 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

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

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

在容器中,我们直接使用pip list 查看python的三方包,我们可以看到已经成功安装了。
docker conda,CI/CD,docker,conda,容器
最后我整理了一下dockerfile的内容,下面的是最终版文件。

FROM continuumio/miniconda3 AS base
WORKDIR /slab

ENV PATH /opt/conda/envs/slab/bin:$PATH

RUN 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 /slab

ENV TZ=Asia/Shanghai
ENV PATH /opt/conda/envs/slab/bin:$PATH
ENV CONDA_DEFAULT_ENV slab

RUN 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

SHELL ["/bin/bash", "-c"]

六、dockerfile执行多个命令

SHELL ["/bin/bash", "-c"]

ENTRYPOINT uvicorn main:app --host 0.0.0.0 --port 9099 --workers 4 --env-file config/dev.env & python mq_main.py

七、dockerfile 定义run变参

SHELL ["/bin/bash", "-c"]

ENTRYPOINT ["uvicorn","main:app","--host","0.0.0.0","--port","9099","--workers","4","--env-file"]
CMD ["config/dev.env"]

根据ENTRYPOINT 和CMD,可以读取docker 命令的 --env-file参数,实现变参的使用文章来源地址https://www.toymoban.com/news/detail-843883.html

docker run -d -p 9099 -name dn --env-file config/prod.env xxx:latest

到了这里,关于【Docker】dockerfile部署conda并激活环境的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • [Docker实现测试部署CI/CD----Jenkins集成相关服务器(3)]

             SonarScanner 是一种代码扫描工具,专门用来扫描和分析项目代码质量。扫描和分析完 成之后,会将结果写入到 SonarQube 服务器的数据库中,并在 SonarQube 平台显示这些数 据。         在 SonarQube 官网的帮助文档中可以下载 SonarScanner。这里下载一个 Linux 系统下使

    2024年02月14日
    浏览(23)
  • [Docker实现测试部署CI/CD----构建成功后钉钉告警(7)]

    首先需要在钉钉中创建一个项目群。 复制Webhook,后面在 Jenkins 配置时需要使用。         在Jennkins中下载 build user vars plugin ,获取项目中的相关变量值 在 Jenkins 中下载 DingTalk 插件。 在 Jenkins 的系统管理中可找到“钉钉”,这是安装过 DingTalk 后出现的。 修改Jenkinsfile文件

    2024年02月13日
    浏览(23)
  • [Docker实现测试部署CI/CD----相关服务器的安装配置(2)]

            Jenkins 是一个开源软件项目,是基于 Java 开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件项目可以进行持续集成。 下载Linux版本的jdk,解压到/usr/local目录 进入 /etc/profile 目录,设置环境变量 刷新配置文件,输入

    2024年02月14日
    浏览(28)
  • [Docker实现测试部署CI/CD----相关服务器的安装配置(1)]

    CI,Continuous Integration,持续集成。即将持续不断更新的代码经构建、测试后也持续不断的集成到项目主干分支。 CD,包含两层含义:Continuous Delivery,持续交付,和 Continuous Deployment,持续 部署。 持续交付:是持续集成的后续步骤,持续频繁地将软件的新版本交付到类生产环境

    2024年02月14日
    浏览(27)
  • CI/CD—Docker初入门学习

    Docker 是基于 Go 语言的开源应用容器虚拟化技术。Docker的主要目标是build、ship and run any app,anywhere,即通过对应用组件的封装、分发、部署、运行等生命周期的管理,达到应用组件级别的一次封装、到处运行(来源于官网)。这里的应用组件,即可以是一个Web应用,也可以是

    2024年02月14日
    浏览(35)
  • CI/CD—Docker中深入学习

    什么是容器数据卷: 将应用和环境打包成一个镜像! 数据?如果数据都在容器中,那么我们容器删除,数据就会丢失!需求:数据可以持久 化。MySQL容器删除了,删容器跑路!需求:MySQL数据可以存储在本地 容器之间可以有一个数据共享的技术!Docker 容器中产生的数据,同

    2024年02月14日
    浏览(25)
  • docker 镜像制作 与 CI/CD

    目录 镜像到底是什么? 使用docker创建镜像 步骤: 1、编辑Dockerfile(Dockerfile是docker制作镜像的配方文件) 2、编辑requirements.txt文件  3、编辑app.py文件,我们的程序文件 4、生成镜像文件 5、查看生成的镜像 6、下载启动redis镜像 7、使用生成的镜像生成容器  8、​​​​查看实

    2024年02月11日
    浏览(24)
  • 14. Docker中实现CI和CD

    目录 1、前言 2、什么是CI/CD 3、部署Jenkins 3.1、下载Jenkins 3.2、启动Jenkins 3.3、访问Jenkins页面 4、Jenkins部署一个应用 5、Jenkins实现Docker应用的持续集成和部署 5.1、创建Dockerfile 5.2、集成Jenkins和Docker 6、小结 持续集成(CI/CD)是一种软件开发的经验总结。它用于帮助开发团队和交付

    2024年02月11日
    浏览(20)
  • linux docker部署深度学习环境(docker还是conda)

    在深度学习中,避免不了在远程服务器上进行模型的训练,如果直接在服务器裸机的基础环境跑显然是不可取的,此时搭建用于模型训练的docker环境显得尤为重要。 在深度学习中,避免不了在远程服务器上进行模型的训练,如果直接在服务器裸机的基础环境跑显然是不可取的

    2024年02月21日
    浏览(22)
  • 【CI/CD】基于 Jenkins+Docker+Git 的简单 CI 流程实践(上)

    在如今的互联网时代,随着软件开发复杂度的不断提高,软件开发和发布管理也越来越重要。目前已经形成一套标准的流程,最重要的组成部分就是 持续集成 及 持续交付、部署 。在此,我们在京东云上以一个案例简单实践下 CI 流程。 1.1 CI/CD 持续集成 (Continuous Integration,

    2024年02月13日
    浏览(30)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包