【发布时间】:2020-12-09 14:20:44
【问题描述】:
这里是 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 应用程序压缩包,我添加了一个 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。我在这里不明白什么?
谢谢
【问题讨论】: