Docker 为什么依赖项是通过入口点和tini安装的?
我有一个问题是关于一个on的实现 正在通过conda、pip和apt促进附加软件包的安装 有两件事我不明白:Docker 为什么依赖项是通过入口点和tini安装的?,docker,dask,tini,Docker,Dask,Tini,我有一个问题是关于一个on的实现 正在通过conda、pip和apt促进附加软件包的安装 有两件事我不明白: 为什么不把这些说明放在Dockerfile中呢?可能通过复制专用文件(requirements.txt、environment.yaml等)间接(模块化) 为什么要通过tini执行此操作?最后,它可以执行exec“$@”,在那里可以启动调度程序或工作程序-这是我与tini的更多联系 这样,每次从构建映像运行容器时,都必须重复安装过程 也许我想得太多了,但这似乎很不寻常——但也许这是一个D
Dask内部人员的可选奖金问题:
- 为什么要将prepare.sh复制到
(而不是将f.x.复制到/usr/bin
)/tmp
- 创建目录的目的是什么
/bin
下、/usr/local/bin
下等),以及除计划升级之外不应更改的内容。通常使用pip
、maven
或其他执行依赖关系管理的程序安装的任何内容,以及使用apt get
或同等软件安装的任何内容。这些文件不应从Dockerfile或entrypoint脚本安装。更好的方法是使用已经安装的所有依赖项构建基本映像,然后将该映像用作进一步开发的源。这有许多优点:它确保了一个稳定的、位于中心的启动平台,每个人都可以使用它进行开发和测试(它在重要的地方强制统一);它可以防止您对托管这些库的服务器进行重击(不断地从pypy.org重新下载所有这些库是非常糟糕的形式……必须有人为此带宽付费);它使构建速度更快;如果您有一个单独的安全团队,这可能有助于减少他们需要扫描的文件数量
FROM continuumio/miniconda3:4.8.2
RUN conda install --yes \
-c conda-forge \
python==3.8 \
[...]
&& rm -rf /opt/conda/pkgs
COPY prepare.sh /usr/bin/prepare.sh
RUN mkdir /opt/app
ENTRYPOINT ["tini", "-g", "--", "/usr/bin/prepare.sh"]