Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.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
Python dockfile中是否需要COPY.tar.gz?_Python_Django_Docker_Pip - Fatal编程技术网

Python dockfile中是否需要COPY.tar.gz?

Python dockfile中是否需要COPY.tar.gz?,python,django,docker,pip,Python,Django,Docker,Pip,Docker新手在这里,快速询问Docker Django时的COPY命令 我认为COPY命令用于将本地文件复制到Docker容器/上下文中,或者,就Docker而言,在构建过程中,该文件不存在 以下教程中的开发Dockerfile包含以下部分: # install dependencies RUN pip install --upgrade pip COPY ./requirements.txt . RUN pip install -r requirements.txt 所以我知道,如果在构

Docker新手在这里,快速询问Docker Django时的COPY命令

我认为COPY命令用于将本地文件复制到Docker容器/上下文中,或者,就Docker而言,在构建过程中,该文件不存在

以下教程中的开发Dockerfile包含以下部分:

# install dependencies
RUN pip install --upgrade pip
COPY ./requirements.txt .
RUN pip install -r requirements.txt
所以我知道,如果在构建过程中没有COPY命令,第二次运行命令将失败,因为它不知道requirements.txt是什么。因此,由于我想安装django polls应用程序tarball,我添加了一个副本,并在第二次运行时添加了一个短语:

# install dependencies
COPY ./requirements.txt .
COPY ./django-polls-0.1.tar.gz .
RUN pip install --upgrade pip && pip install -r requirements.txt && pip install django-polls-0.1.tar.gz
如您所见,我组合了两个RUN命令,添加了COPY.tar.gz行,并在RUN命令的末尾添加了.tar.gz安装。因此,我有两个问题,第二个问题是本文的重点:

  • 是否需要将
    pip安装--upgrade pip
    移动到最终运行命令中?我知道两个不同的RUN命令不会相互影响,因此最初的第一个RUN没有做任何事情

  • 是否需要添加第二个复制命令?我这样问是因为我认为是这样,但后来我意识到我在生产Dockerfile中遗漏了它,它仍然能够安装django轮询

  • 也就是说,我的生产Dockerfile有以下几行:

    # install dependencies
    COPY ./requirements.txt .
    RUN pip install --upgrade pip && pip wheel --no-cache-dir --no-deps --wheel-dir /usr/src/app/wheels -r requirements.txt && pip install django-polls-0.1.tar.gz
    
    即使没有
    拷贝。/django-polls-0.1.tar.gz.
    行,它也能够安装django-polls。我在这里不明白什么

    谢谢

    是否有必要将pip安装-升级pip移到最终运行命令中?我知道两个不同的RUN命令不会相互影响,因此最初的第一个RUN没有做任何事情

    这并不是真的需要工作,但它在某种程度上是一种最佳实践,因为您在Docker文件中添加的每个RUN命令都会向生成的Docker图像添加一个新层。因此,如果可能的话,并且您没有从缓存中获益(yayers在构建过程中被缓存),您应该将其合并到一个RUN命令中

    是否需要添加第二个复制命令?我这样问是因为我认为是这样,但后来我意识到我在生产Dockerfile中遗漏了它,它仍然能够安装django轮询

    对于
    COPY
    命令,您完全理解它的工作原理。所以这是必要的

    即使没有副本。/django-polls-0.1.tar.gz。它能够安装django民意测验。我在这里不明白什么

    从您在此处列出的内容来看,这无法工作。之所以这样做,唯一的原因可能是因为该文件是在前一步中添加/安装的,我无法确定,因为您没有在此处列出完整的Dockerfile


    向Shogoki致意

    谢谢你的回复。是的,看起来Docker正在缓存一些东西,但仍然不确定教程为什么要在自己的运行中运行pip升级。感谢您确认复制功能。你认为以前的
    副本行可能正在复制tar.gz以及其他所有内容?如果
    requirements.txt
    文件发生更改,则在
    COPY
    命令之前的
    RUN
    命令将不会重复。但是如果有
    副本行,它实际上复制了整个目录,您不需要单独复制单个文件。