我们新建一个文件,命令为Dockerfile,是没有扩展名的哦。本地安装Docker后就可以docker build
FROM swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/pytorch/pytorch:2.5.1-cuda12.4-cudnn9-devel
ARG DEBIAN_FRONTEND=noninteractive
ENV TZ Asia/Shanghai
RUN sed -i 's|http://ports.ubuntu.com|https://mirrors.tuna.tsinghua.edu.cn|g' /etc/apt/sources.list
RUN apt update -y && \
apt install -y curl wget net-tools git cmake poppler-utils tesseract-ocr tesseract-ocr-chi-sim libopenblas-dev ninja-build build-essential pkg-config
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
ENV TIME_ZONE Asia/Shanghai
RUN apt-get update && apt-get install tzdata -y && apt-get install openssh-server -y
RUN apt-get update && apt-get install -y vim telnet iputils-ping unzip bzip2
RUN mkdir -p /workspace/envs
RUN rm -rf /opt/conda/envs
RUN ln -s /workspace/envs /opt/conda/envs
RUN ln -s /opt/conda/etc/profile.d/conda.sh /etc/profile.d/conda.sh
ENV PATH /opt/conda/bin:$PATH
RUN /opt/conda/bin/conda init bash --system && \
echo ". /opt/conda/etc/profile.d/conda.sh" >> /etc/profile && \
echo "conda activate base" >> /etc/profile && \
conda info --envs
RUN apt-get install pip -y
RUN echo "export PATH=/usr/local/cuda/bin:$PATH" >> /etc/profile.d/cuda.sh && \
echo "export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH" >> /etc/profile.d/cuda.sh && \
chmod +x /etc/profile.d/cuda.sh
RUN conda install python=3.11 -y
RUN pip install torch==2.3.0 torchvision==0.18.0 torchaudio==2.3.0 --index-url https://download.pytorch.org/whl/cu118
以下是该 Dockerfile 的逐行详解,结合 Docker 最佳实践和指令功能分析:
1. 基础镜像设置
FROM swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/pytorch/pytorch:2.5.1-cuda12.4-cudnn9-devel
- 作用:基于华为云镜像仓库中的 PyTorch 官方镜像构建,预装了 PyTorch 2.5.1、CUDA 12.4 和 cuDNN 9 的开发环境。
- 说明:使用国内镜像加速下载,适合中国地区使用。
2. 构建参数与环境变量
ARG DEBIAN_FRONTEND=noninteractive
ENV TZ Asia/Shanghai
-
ARG
:设置构建参数DEBIAN_FRONTEND=noninteractive
,避免apt
安装过程中的交互提示(如时区选择)。 -
ENV
:定义容器运行时环境变量TZ=Asia/Shanghai
,配置系统时区为上海。
3. 软件源替换
RUN sed -i 's|http://ports.ubuntu.com|https://mirrors.tuna.tsinghua.edu.cn|g' /etc/apt/sources.list
- 作用:将 Ubuntu 官方软件源替换为清华镜像源,加速国内软件包下载。
- 命令解析:
sed
命令修改/etc/apt/sources.list
文件中的 URL。
4. 安装系统依赖
RUN apt update -y && \
apt install -y curl wget net-tools git cmake poppler-utils tesseract-ocr tesseract-ocr-chi-sim libopenblas-dev ninja-build build-essential pkg-config
- 依赖说明:
- 基础工具:
curl
、wget
、net-tools
(网络诊断)。 - 开发工具:
git
、cmake
、build-essential
(编译工具链)。 - OCR 支持:
tesseract-ocr
及中文语言包tesseract-ocr-chi-sim
。 - 数学库:
libopenblas-dev
(优化矩阵运算)。
- 基础工具:
5. 时区与本地化配置
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
RUN apt-get update && apt-get install tzdata -y && apt-get install openssh-server -y
- 时区同步:软链接
/etc/localtime
指向上海时区文件。 - 安装依赖:更新时区数据包
tzdata
并安装 SSH 服务(用于远程登录容器)。
6. 安装常用工具
RUN apt-get update && apt-get install -y vim telnet iputils-ping unzip bzip2
- 工具集:
- 文本编辑:
vim
。 - 网络诊断:
telnet
、iputils-ping
(含ping
命令)。 - 压缩工具:
unzip
、bzip2
。
- 文本编辑:
7. Conda 环境配置
RUN mkdir -p /workspace/envs
RUN rm -rf /opt/conda/envs
RUN ln -s /workspace/envs /opt/conda/envs
RUN ln -s /opt/conda/etc/profile.d/conda.sh /etc/profile.d/conda.sh
ENV PATH /opt/conda/bin:$PATH
- 目录管理:
- 创建持久化目录
/workspace/envs
(适合挂载卷)。 - 移除默认环境目录,软链接至
/workspace/envs
,便于环境隔离。
- 创建持久化目录
- 环境激活:将 Conda 初始化脚本链接至系统 Profile,并设置
PATH
包含 Conda 路径。
8. 初始化 Conda
RUN /opt/conda/bin/conda init bash --system && \
echo ". /opt/conda/etc/profile.d/conda.sh" >> /etc/profile && \
echo "conda activate base" >> /etc/profile && \
conda info --envs
RUN apt-get install pip -y
- 全局配置:为所有用户初始化 Conda,并设置默认激活
base
环境。 - 验证:
conda info --envs
显示环境列表(调试用)。 - 补充:安装
pip
确保 Python 包管理可用。
9. CUDA 环境变量
RUN echo "export PATH=/usr/local/cuda/bin:$PATH" >> /etc/profile.d/cuda.sh && \
echo "export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH" >> /etc/profile.d/cuda.sh && \
chmod +x /etc/profile.d/cuda.sh
- 路径配置:添加 CUDA 二进制路径和库路径到环境变量。
- 持久化:通过
/etc/profile.d/cuda.sh
脚本确保容器启动时自动加载。
10. 安装 Python 与 PyTorch
RUN conda install python=3.11 -y
RUN pip install torch==2.3.0 torchvision==0.18.0 torchaudio==2.3.0 --index-url https://download.pytorch.org/whl/cu118
- Python 版本:安装指定版本 Python 3.11。
- PyTorch 安装:
- 通过 PyTorch 官方源安装 CUDA 11.8 兼容的 Torch 2.3.0(尽管基础镜像用 CUDA 12.4,此处可能为兼容性考虑)。
- 注意:若需使用 CUDA 12.4,应选择支持该版本的 PyTorch 包(如
torch==2.3.0+cu124
)。
关键优化点总结
- 国内加速:软件源和 PyTorch 安装均使用国内镜像,提升构建速度。
- 层次合并:多个
RUN
指令合并减少镜像层数(如依赖安装部分)。 - 环境隔离:Conda 环境目录软链接至
/workspace
,便于数据持久化。 - 时区与语言:显式配置时区及中文字符识别支持(
tesseract-ocr-chi-sim
)。 - CUDA 兼容性:需检查 PyTorch 版本与 CUDA 版本的匹配性,避免运行时错误。
此 Dockerfile 适用于深度学习开发环境,兼顾了工具链完整性和国内网络优化。实际部署时,建议根据 GPU 驱动版本调整 PyTorch 的 CUDA 版本。