为什么某些Docker文件复制文件而不是将它们作为卷挂载

时间:2019-04-09 13:11:08

标签: docker docker-compose docker-volume

有人可以向我解释为什么某些Dockerfiles具有复制文件的步骤,而不是仅仅将文件挂载到卷上的原因。

我一直在寻找使用Docker的Django项目的设置,并且dockerfile中包含使用复制命令的步骤:

FROM python:3
ENV PYTHONUNBUFFERED 1
RUN mkdir /
WORKDIR /code
COPY requirements.txt /code/
RUN pip install -r requirements.txt
COPY . /code/

在我使用过的其他Dockerfile文件中(homeassant),我刚刚将目录挂载为卷,并且该目录可以正常工作。这是怎么回事?

我不能只将代码和需求保存在同一文件夹中并挂载它们吗?

只是无法理解

编辑:

作为参考,我正在研究Docker site tutorial for Django,它将根目录挂载为/ code

version: '3'

services:
  db:
    image: postgres
  web:
    build: .
    command: python manage.py runserver 0.0.0.0:8000
    volumes:
      - .:/code
    ports:
      - "8000:8000"
    depends_on:
      - db

如果我们无论如何都将文件复制到/code上,为什么该卷已装入。也许那是让我失望的原因?

1 个答案:

答案 0 :(得分:1)

卷用于管理Docker容器存储的文件。它允许Docker容器写入文件系统上的特定位置。如果您只想执行一段代码,最好将其复制到Docker容器中,以使其对主机的文件系统没有写权限。

编辑: 我实际上不知道他们为什么在docker compose设置中指定卷。 build: .指定它应在当前目录中使用Dockerfile,该目录已包含复制语句。似乎没有意义。在本教程中可能是一个错误。