我正在准备一个带有Ubuntu v18的docker映像。04用于s/w开发。我包括miniconda来管理开发环境,这都是golang。我使用YAML文件创建环境:
RUN conda env create --file goDev.yml
我还希望在docker启动时激活conda环境。这有点棘手,b/c conda必须首先初始化,但JaegerP提供了一个很好的解决方法,涉及到更新。谢谢。
不幸的是,我还需要在golang上安装第三方YAML包。我必须激活环境才能安装软件包,因此它让我回到了JaegerP帮助我克服的原始问题:在环境初始化之前我无法激活环境,在docker build b/c期间我无法初始化,我必须重新启动shell。
换句话说,这工作得很好:
运行conda env create--file goDev。yml
当docker启动时,所需的conda环境被激活,不幸的是没有安装外部YAML包。这不起作用b/c conda环境在初始化之前不能被激活,初始化需要重新启动shell:
运行conda env create--file goDev。yml
我可以更新。如果此文件不存在,请进一步安装YAML包:
/root/go/pkg/mod/cache/download/gopkg.in/yaml.v2
是否有一个更优雅的解决方案,使我能够在docker构建期间安装第三方golang包,而不是在每次运行映像时检查它?
conda run
函数提供了一种在环境上下文中运行代码的干净方法,而无需手动激活。试试类似的东西
RUN conda env create --file goDev.yml
&& rm goDev.yml
&& conda run -n go_dev go get gopkg.in/yaml.v2
&& echo '. /opt/conda/etc/profile.d/conda.sh && conda activate go_dev' >> ${HOME}/.bashrc
此外,您可能希望使用结束所有涉及Conda的跑步链
conda clean -qafy
以帮助最小化Docker图像层大小。