文章目录
前言
本教程包括:
1.如何通过Dockerfile创建镜像
2.如何在镜像中下载conda环境
3.如何打包本机conda环境,封装成docker镜像
一、Dockerfile创建镜像
按照以下文件构建Dockerfile,从dockerfile中构建镜像。
# Dockerfile
FROM <镜像库>:tag #这里可以是ubuntu,python,pytorch等,本例采用torch环境
# # 配置清华源(Debian 11 bullseye)
# RUN echo "deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye main contrib non-free" > /etc/apt/sources.list && \
# echo "deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye-updates main contrib non-free" >> /etc/apt/sources.list && \
# echo "deb https://mirrors.tuna.tsinghua.edu.cn/debian-security bullseye-security main contrib non-free" >> /etc/apt/sources.list
# # 安装系统依赖
# RUN apt-get update && apt-get install -y \
# git \
# build-essential \
# libgl1 \
# libglib2.0-0 \
# && rm -rf /var/lib/apt/lists/*
# 设置工作目录
WORKDIR /workspace
# 安装ComfyUI依赖
COPY ComfyUI/requirements.txt .
RUN pip install --no-cache-dir -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt #可以挂清华源,不然很慢
二、在docker中下载conda环境
进入构建镜像的容器中,执行以下三条命令,下载并安装miniconda。
# 下载miniconda
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
# 安装miniconda
# -b 静默安装,即无需用户交互 -p /opt/conda 安装位置
bash Miniconda3-latest-Linux-x86_64.sh -b -p /opt/conda
# 删除安装包
rm Miniconda3-latest-Linux-x86_64.sh
然后在docker容器中,在命令行敲入以下指令进行配置:
# 1. 将 Conda 初始化脚本添加到 /etc/profile.d/(系统级配置)
echo 'export PATH="/opt/conda/bin:$PATH"' > /etc/profile.d/conda.sh
# 2. 使配置文件可执行
chmod +x /etc/profile.d/conda.sh
# 3. 立即生效(可选)
source /etc/profile.d/conda.sh
然后在启动docker时的.sh文件中添加:(为了在一开始激活conda环境)
set -e
# 启动conda环境
source /workspace/conda/etc/profile.d/conda.sh
conda activate comfyui
三、打包本机conda环境,封装成docker镜像
方法一:挂载环境(临时生效)
在docker compose文件中将本机的conda环境挂载到镜像中对应的conda环境中
volumes:
- /data/workspace/anaconda3/envs/comfyui:/workspace/conda/envs/comfyui
方法二:打包环境镜像(永久有效)
将本机的conda环境直接复制到对应的conda环境中,直接打包成镜像
参考链接:Docker 封装anaconda环境,生成镜像并打包,纯小白一文读懂(二)
注意:使用该教程需要将dockerfile文件中的FROM anaconda替换为FROM torch,然后在torch构建的容器内参考二安装anaconda环境,再按照这个教程中将本地的envs环境直接复制到容器内的anaconda环境中,再打包成镜像。(完全按照这个教程会出现torch等无法使用的问题)
docker cp /home/b/miniconda3/envs/yolo1.7 test:/opt/conda/envs
其他思路:
1.将本机的conda环境中的包导出
# 导出环境配置到YAML文件
conda env export -n myenv > environment_backup.yaml
然后在docker中通过yaml文件重建环境:
conda env create -f environment_backup.yaml --name myenv_restored
2.导出本机pip安装的包
pip freeze > requirements.txt
然后在docker中恢复
# 方法:结合pip恢复
conda env create -n myenv_new python=3.10
conda activate myenv_new
pip install -r requirements.txt
但在实验过程中,由于导出的文件中有一些和本机绑定的路径,导致这两种方法都失败了,但感觉思路可行,记录一下