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

发布于:2025-04-04 ⋅ 阅读:(32) ⋅ 点赞:(0)

前言

在深度学习与自然语言处理领域,环境配置的复杂性常常成为开发者的痛点。本文将通过一个基于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成功安装镜像如下图:
在这里插入图片描述


网站公告

今日签到

点亮在社区的每一天
去签到