Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Docker 为什么依赖项是通过入口点和tini安装的?_Docker_Dask_Tini - Fatal编程技术网

Docker 为什么依赖项是通过入口点和tini安装的?

Docker 为什么依赖项是通过入口点和tini安装的?,docker,dask,tini,Docker,Dask,Tini,我有一个问题是关于一个on的实现 正在通过conda、pip和apt促进附加软件包的安装 有两件事我不明白: 为什么不把这些说明放在Dockerfile中呢?可能通过复制专用文件(requirements.txt、environment.yaml等)间接(模块化) 为什么要通过tini执行此操作?最后,它可以执行exec“$@”,在那里可以启动调度程序或工作程序-这是我与tini的更多联系 这样,每次从构建映像运行容器时,都必须重复安装过程 也许我想得太多了,但这似乎很不寻常——但也许这是一个D

我有一个问题是关于一个on的实现

正在通过conda、pip和apt促进附加软件包的安装

有两件事我不明白:

  • 为什么不把这些说明放在Dockerfile中呢?可能通过复制专用文件(requirements.txt、environment.yaml等)间接(模块化)
  • 为什么要通过tini执行此操作?最后,它可以执行exec“$@”,在那里可以启动调度程序或工作程序-这是我与tini的更多联系
  • 这样,每次从构建映像运行容器时,都必须重复安装过程

    也许我想得太多了,但这似乎很不寻常——但也许这是一个Dockerfile模式,有很好的理由


    Dask内部人员的可选奖金问题:

    • 为什么要将prepare.sh复制到
      /usr/bin
      (而不是将f.x.复制到
      /tmp
    • 创建目录的目的是什么

    这实际上取决于入口点脚本安装的文件的性质和使用情况。一般来说,我喜欢将其分为几类:

  • 在主机系统上频繁更改的本地文件,这些文件将被滚动到生产版本的最终映像中。这适用于正在开发的应用程序的源代码,需要在容器中进行测试。您希望每次重建映像时都将这些复制到运行时。在Dockerfile中使用副本

  • 来自其他位置的频繁更改和/或特定于部署环境的文件。这就像来自Hashicorp保险库的秘密、网络设置、服务器配置等。。。。这可能会一直下载到容器中,即使在它投入生产时也是如此。入口点脚本应该下载这些文件,它应该根据主机注入的环境变量来决定要获取哪些文件以及从何处获取这些文件

  • 库、可执行程序(在
    /bin
    下、
    /usr/local/bin
    下等),以及除计划升级之外不应更改的内容。通常使用
    pip
    maven
    或其他执行依赖关系管理的程序安装的任何内容,以及使用
    apt get
    或同等软件安装的任何内容。这些文件不应从Dockerfile或entrypoint脚本安装。更好的方法是使用已经安装的所有依赖项构建基本映像,然后将该映像用作进一步开发的源。这有许多优点:它确保了一个稳定的、位于中心的启动平台,每个人都可以使用它进行开发和测试(它在重要的地方强制统一);它可以防止您对托管这些库的服务器进行重击(不断地从pypy.org重新下载所有这些库是非常糟糕的形式……必须有人为此带宽付费);它使构建速度更快;如果您有一个单独的安全团队,这可能有助于减少他们需要扫描的文件数量

  • 你可能在看#3,但我把这三个都包括在内,因为我认为这是一种分类事物的有用方法

    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"]