如何解决是否需要在Dockefile中复制.tar.gz?
这里是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命令,第二条RUN命令将失败,因为它不知道什么是requirements.txt。因此,由于我想安装django-polls应用程序tarball,因此我添加了一个COPY并将该短语添加到第二个RUN:
# 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行,并将.tar.gz安装附加到RUN命令的末尾。所以我有两个问题,第二个是本文的重点:
-
是否需要将
pip install --upgrade pip
移至最终的RUN命令中?我知道两个不同的RUN命令不会互相影响,因此最初的第一个RUN什么都不做。 -
是否需要添加第二个COPY命令?我问是因为我以为是,但是后来我意识到我在生产的Dockerfile中省略了它,但它仍然能够安装django-polls。
也就是说,我的生产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
即使没有COPY ./django-polls-0.1.tar.gz .
行,它也能够安装django-polls。我在这里不明白什么?
谢谢
解决方法
是否有必要将pip install --upgrade pip移到最终的RUN命令中?我知道两个不同的RUN命令不会互相影响,因此最初的第一个RUN什么都不做。
实际上并不一定要工作,但这是一种最佳实践,因为您在Dockerfile中添加的每个RUN命令都会在生成的Docker Image中添加新的Layer。因此,如果可能的话,如果您没有从缓存中受益(构建期间会缓存Yayers),则应将其组合为一个RUN命令。
是否需要添加第二个COPY命令?我问是因为我以为是,但是后来我意识到我在生产的Dockerfile中省略了它,但它仍然能够安装django-polls。
对于COPY
命令,您完全理解它是如何工作的。是的,这应该是必要的。
甚至没有COPY ./django-polls-0.1.tar.gz。行,它能够安装django-polls。我在这里不明白什么?
这在您在此处列出的内容中无效。起作用的唯一原因可能是因为该文件是在上一步中以某种方式添加/安装的,我无法确定,因为您没有在此处列出完整的Dockerfile。
最好的问候Shogoki
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。