如何指定conda环境打包成docker镜像
本环境涉及yolov8环境,使用的torch推理等很多第三方库,安装比较费时。找到两种方法,都试过了,不过只有后一种成功了。配合docker命令操作更好。(注意,使用的miniconda3管理虚拟环境)
一、直接通过 environment.yml
构建
1.1 导出 Conda 环境配置
在本地生成 environment.yml
文件:
conda activate myenv
conda env export > environment.yml
1.2 创建 Dockerfile
新建一个 Dockerfile
文件,内容如下:
# 使用官方 Miniconda 镜像(轻量级)注意:docker.1ms.run/是国内docker源,后面是镜像名
FROM docker.1ms.run/continuumio/miniconda3:latest# 复制环境配置文件到镜像中
COPY environment.yml /tmp/# 创建 Conda 环境(替换 `myenv` 为你的环境名)
RUN conda env create -f /tmp/environment.yml -n myenv# 激活环境并设置默认命令(关键步骤!)
# 方法 1:通过修改 PATH 直接使用环境中的命令
ENV PATH /opt/conda/envs/myenv/bin:$PATH# 方法 2:在容器启动时激活环境(需配合 `conda init` 使用)
# RUN echo "conda activate myenv" >> ~/.bashrc
# SHELL ["/bin/bash", "--login", "-c"]# 可选:清理缓存减小镜像体积
RUN conda clean -afy# 设置默认启动命令(根据实际需求调整)
CMD ["python", "your_script.py"]
1.3 构建 Docker 镜像
docker build -t myenv-image .
1.4 运行容器
docker run -it --rm myenv-image
如果涉及显卡可以参考:
docker run --name myevn --runtime=nvidia --gpus=all --network=host --privileged=true -it cdcab10f7a21 /bin/bash
二、使用 conda-pack
预打包环境(离线场景)
2.1 本地打包 Conda 环境
在conda的base环境中安装conda pack库(未特意注明默认在base环境中):
conda install -c conda-forge conda-pack
使用 conda-pack
生成压缩包:
conda pack -n myenv -o myenv.tar.gz
2.2 创建 Dockerfile
# 使用基础镜像(如 Ubuntu)
FROM docker.1ms.run/ubuntu:22.04# 安装必要工具
RUN apt-get update && apt-get install -y \bzip2 \&& rm -rf /var/lib/apt/lists/*
# 下面库是opencv-python依赖库,如果没有可不加
RUN apt-get update
RUN apt-get install ffmpeg libsm6 libxext6 -y# 创建 Conda 环境目录
ENV CONDA_DIR /opt/conda
RUN mkdir -p $CONDA_DIR# 复制预打包的 Conda 环境到镜像
COPY peiwang.tar.gz /tmp/
COPY peiwang_project ~/
RUN tar -xzf /tmp/peiwang.tar.gz -C $CONDA_DIR \&& rm /tmp/peiwang.tar.gz# 设置环境变量
ENV PATH $CONDA_DIR/bin:$PATH# 创建项目目录并复制项目文件到 /home/peiwang_project
RUN mkdir -p /home/peiwang_project
COPY peiwang_project /home/peiwang_project# 设置默认工作目录和启动命令
WORKDIR /home/peiwang_project
CMD ["python", "./code/src/web_running.py"]
2.3 构建
docker build -t myenv-image .
2.4 运行镜像
docker run --name peiwang_test --runtime=nvidia --gpus=all --network=host --privileged=true -it peiwang-image /bin/bash
注意:上述有的名字用myenv,有的用peiwang,需要注意区别。