Anaconda 的 Docker 镜像构建




问题:如果Python项目用了Anaconda和pip进行环境的管理,想生成Docker镜像。因为Anaconda和Docker之间的交互不太好,直接在Anaconda或miniconda上生成Docker image,容易在配置环境时出问题。
思路:利用 Docker 构建镜像,应该最小化依赖。Anaconda是一个Python的集成开发环境,应该用于开发环境,而非生产环境。生产环境不推荐用Anaconda这种集成环境。
解决方案:用 conda 导出 environment.yml ,用 pip 导出 requirements.txt。用 FROM python:${PYTHON_VERSION}-slim as base 作为基础镜像。可以用 GPT-4 检查 environment.yml 中用 conda 生成,且不在 requirements.txt 中的包,即
1.检查是否是 Windows 或操作系统环境的包;
2.检查是否已经在安装 python 时自带了的;
3.检查是否存在没有用到的包。
将剩下的包修改一下形式,放入requirements.txt中(如将- djangorestframework=3.14.0=pyhd8ed1ab_0 修改成 djangorestframework==3.14.0)。再用requirements.txt来生成环境,问题得到解决。
附注:1.本方案构建的Docker镜像并没有带全部的miniconda环境。
2.若 docker build 运行较慢可以用缓存。如在Dockerfile中,写入
RUN --mount=type=cache,target=/root/.cache/pip
--mount=type=bind,source=requirements.txt,target=requirements.txt
python -m pip install -r requirements.txt3.若遇到网络问题,可以在Docker Desktop中配置国内镜像。