当前位置: 首页 > news >正文

Dockerfile文件构建镜像Anaconda+Python教程

文章目录

  • 前言
  • Dockerfile 核心模块解析**
  • 一、Dockerfile基础镜像选择
  • 二、系统基础配置
    • 1、时区设置
    • 2、镜像源替换
  • 三、系统依赖安装
  • 四、复制本地文件
  • 五、指定路径
  • 六、Anaconda环境配置
    • 1、anaconda环境安装
    • 2、配置虚拟环境
    • 3、创建conda虚拟环境
    • 4、启动和安装环境
  • 七、完整dockerfile文件

前言

在深度学习与自然语言处理领域,环境配置的复杂性常常成为开发者的痛点。本文将通过一个基于CUDA 12.1的深度学习环境Dockerfile实例,详解如何高效构建可复现的容器化开发环境,并结合Dockerfile最佳实践,助你掌握企业级镜像构建技巧。

Dockerfile 核心模块解析**

一、Dockerfile基础镜像选择

可以使用网上docker镜像拉取,也可以使用本地镜像构建。我使用本地镜像构建,其代码如下:

FROM nvidia/cuda:12.1.1-cudnn8-devel-ubuntu22.04

关键点:选择官方CUDA镜像,确保GPU加速支持
最佳实践
• 优先使用带版本标签的官方镜像(如12.1.1-cudnn8),避免latest标签
• 开发环境推荐-devel版本,包含完整开发工具链

二、系统基础配置

给系统配置时间区和镜像源设置,分别如下:

1、时区设置

# 时区设置
ENV TZ=Asia/Shanghai
RUN apt-get update && \
    DEBIAN_FRONTEND=noninteractive apt-get install -y tzdata && \
    ln -fs /usr/share/zoneinfo/$TZ /etc/localtime && \
    echo $TZ > /etc/timezone

2、镜像源替换

RUN sed -i \
    -e 's|http://.*ubuntu.com|https://mirrors.aliyun.com|g' \
    /etc/apt/sources.list

技术细节
DEBIAN_FRONTEND=noninteractive:避免交互式提示,实现静默安装
分层构建:合并apt-get update与安装命令,防止缓存过期
• 国内镜像加速:替换阿里云源提升包下载速度

三、系统依赖安装

一般而言,需要对docker镜像进行安装,可使用如下命令完成。

RUN apt-get install -y --no-install-recommends \
    build-essential libreadline-dev ... && \
    apt-get clean && \
    rm -rf /var/lib/apt/lists/*

优化技巧
--no-install-recommends:仅安装必要依赖,减少镜像体积
清理缓存apt-get cleanrm -rf组合减少冗余文件

四、复制本地文件

通过ADD命令实现。

# 复制项目文件
ADD nl2sql /opt/nl2sql
WORKDIR /opt/nl2sql

五、指定路径

在 Dockerfile 中,WORKDIR 指令用于设置容器内的工作目录。它定义了后续的 RUN、CMD、ENTRYPOINT、COPY 和 ADD 指令执行时的默认路径。

WORKDIR /opt/nl2sql

六、Anaconda环境配置

如果你需要配置anaconda环境安装,可以使用网络下载或本地提供,我使用本地提供。

1、anaconda环境安装

anaconda环境安装使用了本地文件,也指定安装了/home/anaconda3路径中。

ADD Anaconda3-2022.10-Linux-x86_64.sh /tmp/
RUN bash /tmp/Anaconda3-2022.10-Linux-x86_64.sh -b -p /home/anaconda3 && \
    rm /tmp/Anaconda3-2022.10-Linux-x86_64.sh

最佳实践
• 使用ADD指令:支持本地文件直接部署(需注意与COPY的区别)
虚拟环境隔离:创建独立conda环境避免包冲突

2、配置虚拟环境

简单说就是将conda路径加载到~/.bashrc系统环境中。

# 配置环境变量(参考[4,5,7](@ref))
ENV PATH="/home/anaconda3/bin:$PATH"
RUN conda init bash && \
    conda config --set auto_activate_base false

3、创建conda虚拟环境

# 创建虚拟环境(参考[1,5,7](@ref))
RUN conda create -y -n nl2sql_env python=3.12.9

4、启动和安装环境

启动虚拟环境和安装相应库,如下:

# 安装Python依赖(在虚拟环境中安装[1,3,7](@ref))
RUN echo "conda activate nl2sql_env" >> ~/.bashrc && \
    /bin/bash -c "source activate nl2sql_env && \
    python -m pip install --upgrade pip && \
    pip install \
    langchain-qdrant \
    langchain_openai \
    langchain==0.3.19 \
    dmPython \
    vanna==0.7.6 \
    simplejson \
    llama-index \
    loguru==0.7.3 \
    dataclasses \
    qdrant_client \
    langchain_qdrant \
    unstructured \
    langchain-community \
    python-docx \
    -i https://pypi.tuna.tsinghua.edu.cn/simple \
    --trusted-host pypi.tuna.tsinghua.edu.cn"

七、完整dockerfile文件

我给出整体内容如下:


# 基础镜像(基于CUDA 12.1 + cuDNN 8 + Ubuntu 22.04)
FROM nvidia/cuda:12.1.1-cudnn8-devel-ubuntu22.04

# ---------- 系统基础配置 ----------
# 设置时区(需显式安装tzdata[6,7](@ref))
ENV TZ=Asia/Shanghai
RUN apt-get update && \
    DEBIAN_FRONTEND=noninteractive apt-get install -y tzdata && \
    ln -fs /usr/share/zoneinfo/$TZ /etc/localtime && \
    echo $TZ > /etc/timezone && \
    apt-get clean

# 替换阿里云镜像源(完整覆盖所有仓库[9,11](@ref))
RUN sed -i \
    -e 's|http://$archive\|security$.ubuntu.com|https://mirrors.aliyun.com|g' \
    /etc/apt/sources.list

# ---------- 系统依赖安装 ----------
RUN apt-get update && \
    apt-get install -y --no-install-recommends \
    software-properties-common \
    build-essential \
    libreadline-dev \
    libncursesw5-dev \
    libssl-dev \
    libsqlite3-dev \
    tk-dev \
    libgdbm-dev \
    libbz2-dev \
    zlib1g-dev \
    libffi-dev \
    liblzma-dev \
    wget \
    bzip2 && \
    apt-get clean && \
    rm -rf /var/lib/apt/lists/*

# ---------- Anaconda3 安装 ----------
# 安装Anaconda到指定路径(参考[1,3,6](@ref))
ADD Anaconda3-2022.10-Linux-x86_64.sh /tmp/
RUN bash /tmp/Anaconda3-2022.10-Linux-x86_64.sh -b -p /home/anaconda3 && \
    rm /tmp/Anaconda3-2022.10-Linux-x86_64.sh

# 配置环境变量(参考[4,5,7](@ref))
ENV PATH="/home/anaconda3/bin:$PATH"
RUN conda init bash && \
    conda config --set auto_activate_base false

# 创建虚拟环境(参考[1,5,7](@ref))
RUN conda create -y -n nl2sql_env python=3.12.9

# ---------- 应用部署 ----------
# 复制项目文件
ADD nl2sql /opt/nl2sql
WORKDIR /opt/nl2sql

# 安装Python依赖(在虚拟环境中安装[1,3,7](@ref))
RUN echo "conda activate nl2sql_env" >> ~/.bashrc && \
    /bin/bash -c "source activate nl2sql_env && \
    python -m pip install --upgrade pip && \
    pip install \
    langchain-qdrant \
    langchain_openai \
    langchain==0.3.19 \
    dmPython \
    vanna==0.7.6 \
    simplejson \
    llama-index \
    loguru==0.7.3 \
    dataclasses \
    qdrant_client \
    langchain_qdrant \
    unstructured \
    langchain-community \
    python-docx \
    -i https://pypi.tuna.tsinghua.edu.cn/simple \
    --trusted-host pypi.tuna.tsinghua.edu.cn"

# 设置执行权限(按需调整[5](@ref))
RUN find /opt/nl2sql -name "*.sh" -exec chmod +x {} \;

dockerfile成功安装镜像如下图:
在这里插入图片描述

http://www.dtcms.com/a/108329.html

相关文章:

  • 六十天Linux从0到项目搭建(第十八十九天)(缓冲区机制、未打开的磁盘存放、文件存储、磁盘物理结构、寻址、块设备管理、文件系统、增删查改、硬链接、软链接)
  • 通俗易懂的解释Git操作中“合并”和“变基”的区别
  • CMD命令通过已知ip使用以下三种方式来获取对方主机名
  • 常见优化SQL语句策略和示例
  • ControlNet-Tile详解
  • 最新Spring Security实战教程(八)Remember-Me实现原理 - 持久化令牌与安全存储方案
  • Python数据可视化-第3章-图表辅助元素的定制
  • PyTorch 中池化层MaxPool2d
  • CSS--解决float: right在空间不够时会自动往下移的问题
  • 音视频入门基础:MPEG2-TS专题(26)——通过FFmpeg命令使用RTP发送TS流
  • 【Word】批注一键导出:VBA 宏
  • C#核心学习(五)面向对象--封装(4)C#中的索引器详解:让对象像数组一样灵活访问
  • MySQL的数据目录以及日志
  • 企业网络优化方案:SD-WAN赋能企业远程办公
  • 使用JSON.stringify报错:Uncaught TypeError: cyclic object value
  • RNN模型与NLP应用——(6/9)Text Generation(文本自动生成)
  • UE小:在Unreal Engine 5中实现多层静态网格体遮挡拾取
  • 【落羽的落羽 C++】模板简介
  • 交易引擎中的设计模式
  • 「青牛科技」GC5331 5V三相无感正弦波电机驱动芯片 对标茂达APX9331/灿瑞OCH2360
  • Spring Cloud Gateway 的核心作用
  • Flutter项目之登录注册功能实现
  • Debian/Ubuntu的networking的`/etc/network/interfaces`配置文件,如何配置route路由
  • SQL问题分析与诊断(8)——关键信息(2)
  • 数据结构----栈
  • LangChain/Eliza框架在使用场景上的异同,Eliza通过配置实现功能扩展的例子
  • 【力扣hot100题】(036)二叉树的最大深度
  • Spring Boot 工程创建详解
  • 小游戏中Enable Exceptions的各选项有何区别
  • 基于开源AI大模型与S2B2C模式的线下服务型门店增长策略研究——以AI智能名片与小程序源码技术为核心