有没有一种优雅的方式让 conda 在 docker 构建期间安装第 3 方 golang 包?
Is there an elegant way to have conda install a 3rd party golang package during a docker build?
我正在为 s/w 开发准备带有 Ubuntu v18.04 的 docker 图像。我包括 miniconda 来管理开发环境,这都是 golang。我create the environment with a YAML file:
RUN conda env create --file goDev.yml
我还希望在 docker 启动时激活 conda 环境。这有点棘手 b/c 必须先初始化 conda,但是 JaegerP provides a nice workaround here 涉及更新 .bashrc(谢谢)。
不幸的是,我还需要安装 a third party YAML package to golang. I have to activate the environment to install the package, so it brings me back to the original problem JaegerP 帮助我克服了:在初始化之前我无法激活环境,并且在 docker 构建期间我无法初始化 b/c 我必须重新启动 shell.
换句话说,这很好用:
RUN conda env create --file goDev.yml
&& rm goDev.yml
&& echo "source /opt/conda/etc/profile.d/conda.sh"
&& echo "conda activate go_dev" >> ${HOME}/.bashrc
docker 启动时会激活所需的 conda 环境,不幸的是没有安装外部 YAML 包。这不起作用 b/c conda 环境在初始化之前无法激活,初始化需要重新启动 shell:
RUN conda env create --file goDev.yml
&& rm goDev.yml
&& conda init bash
&& conda activate go_dev
&& go get gopkg.in/yaml.v2
&& echo "source /opt/conda/etc/profile.d/conda.sh"
&& echo "conda activate go_dev" >> ${HOME}/.bashrc
如果此文件不存在,我可以进一步更新 .bashrc 以安装 YAML 包:
/root/go/pkg/mod/cache/download/gopkg.in/yaml.v2
是否有更优雅的解决方案使我能够在 docker 构建期间安装第 3 方 golang 包,而不是每次图像 运行 时都检查它?
试试 Conda 运行
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 图像层大小。
我正在为 s/w 开发准备带有 Ubuntu v18.04 的 docker 图像。我包括 miniconda 来管理开发环境,这都是 golang。我create the environment with a YAML file:
RUN conda env create --file goDev.yml
我还希望在 docker 启动时激活 conda 环境。这有点棘手 b/c 必须先初始化 conda,但是 JaegerP provides a nice workaround here 涉及更新 .bashrc(谢谢)。
不幸的是,我还需要安装 a third party YAML package to golang. I have to activate the environment to install the package, so it brings me back to the original problem JaegerP 帮助我克服了:在初始化之前我无法激活环境,并且在 docker 构建期间我无法初始化 b/c 我必须重新启动 shell.
换句话说,这很好用:
RUN conda env create --file goDev.yml
&& rm goDev.yml
&& echo "source /opt/conda/etc/profile.d/conda.sh"
&& echo "conda activate go_dev" >> ${HOME}/.bashrc
docker 启动时会激活所需的 conda 环境,不幸的是没有安装外部 YAML 包。这不起作用 b/c conda 环境在初始化之前无法激活,初始化需要重新启动 shell:
RUN conda env create --file goDev.yml
&& rm goDev.yml
&& conda init bash
&& conda activate go_dev
&& go get gopkg.in/yaml.v2
&& echo "source /opt/conda/etc/profile.d/conda.sh"
&& echo "conda activate go_dev" >> ${HOME}/.bashrc
如果此文件不存在,我可以进一步更新 .bashrc 以安装 YAML 包:
/root/go/pkg/mod/cache/download/gopkg.in/yaml.v2
是否有更优雅的解决方案使我能够在 docker 构建期间安装第 3 方 golang 包,而不是每次图像 运行 时都检查它?
试试 Conda 运行
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 图像层大小。