提出问题
Docker是目前封装环境的有效利器,可以在不同机器上实现环境的迁移,方便快捷。目前封装Docker环境有两种方式,一种是自己搭建环境,这一种也在前面的博文Ubuntu20.04安装Docker+深度学习框架搭建中提到过;另一种是通过Dockerfile构建,这种形式是将配置命令一行行写在Dockerfile这样的文件中,然后直接执行Dockerfile就能快速构建Docker虚拟环境。
解决方案
- Dokcerfile构建方式如下所示,按行输入,并保存。
以下内容是:(1)以nvidia/cuda 11.3.1-cudnn8-devel-ubuntu20.04作为基础镜像;(2)安装anaconda3,构建python3.9为虚拟环境,同时利用pip加载requirements.txt安装相关库和conda安装相关库(例如:gdal),此外,还有一些库需要编译安装(例如:libmambapy)
相关辅助文件需提前和Dockerfile文件放置在同一文件夹下,如下图所示。
# 使用nvidia/cuda 11.3.1-cudnn8-devel-ubuntu20.04作为基础镜像
FROM nvidia/cuda:11.3.1-cudnn8-devel-ubuntu20.04
# 设置环境变量,避免交互式安装
ENV DEBIAN_FRONTEND=noninteractive
# 安装基本工具
RUN apt-get update && \
apt-get install -y sudo vim wget
# 下载并安装Anaconda3
RUN wget https://repo.anaconda.com/archive/Anaconda3-2023.03-1-Linux-x86_64.sh && \
sh Anaconda3-2023.03-1-Linux-x86_64.sh -b -p /opt/anaconda3 && \
rm Anaconda3-2023.03-1-Linux-x86_64.sh
# 将Anaconda3添加到环境变量
ENV PATH="/opt/anaconda3/bin:$PATH"
# 创建一个新的conda环境并安装Python 3.9.17
RUN conda create -n myenv python=3.9.17 && \
echo "source activate myenv" > ~/.bashrc
# 激活新的conda环境
SHELL ["conda", "run", "-n", "myenv", "/bin/bash", "-c"]
# 安装指定的Python库
COPY requirements.txt /tmp/requirements.txt
# 使用脚本捕获 pip 安装错误并输出
RUN while read requirement; do pip install --no-cache-dir "$requirement" || echo "Failed to install $requirement"; done < /tmp/requirements.txt
# 安装pytorch相关
RUN pip install torch==1.12.1+cu113 torchvision==0.13.1+cu113 torchaudio==0.12.1 --extra-index-url https://download.pytorch.org/whl/cu113
# 创建工作目录
WORKDIR /app
# 复制 libmambapy 文件夹到容器中
COPY mamba-micromamba-1.4.9 /app/mamba-micromamba-1.4.9
# 在 libmambapy 目录中运行安装脚本
RUN cd /app/mamba-micromamba-1.4.9/libmambapy && \
python setup.py build && \
python setup.py install
# 使用 conda 安装 gdal
RUN conda install -y gdal==3.6.2
# 使用 conda 安装 pyinterp
RUN conda install -c "conda-forge/label/cf202003" pyinterp
# 在启动容器时自动激活conda环境
CMD ["conda", "run", "-n", "myenv", "bash"]
文章评论