RUN mkdir /code 和 ADD 是啥意思。 /代码/
Posted
技术标签:
【中文标题】RUN mkdir /code 和 ADD 是啥意思。 /代码/【英文标题】:What's the meaning of RUN mkdir /code and ADD . /code/RUN mkdir /code 和 ADD 是什么意思。 /代码/ 【发布时间】:2018-08-07 22:32:22 【问题描述】:我现在按照 Docker 的说明创建一个 Django+mysql 项目。但是对于 Dockerfile,谁能解释为什么我们有这两行?
FROM python:2.7
ENV PYTHONUNBUFFERED 1
RUN mkdir /code <=====Why we need to mkdir here, will /code dir be delete after build?
RUN mkdir /code/db
WORKDIR /code
ADD ./mysite/requirements.txt /code/ <==For my understanding, here we copy our local requirements file into image's /code dir?
RUN pip install -r requirements.txt
ADD . /code/ <== What's this step doing? Copying all my current dir's content into /code? why we do this?
并且在 docker-compose.yml 中有这样的行:
web:
build: .
command: python ./mysite/manage.py runserver 0.0.0.0:8000
volumes:
< - .:/code >
ports:
- "8000:8000"
links:
- db
【问题讨论】:
"谁能解释一下为什么我们有这两行?"创建目录。 @tkausl 是的,我知道它是用来创建目录的。但是为什么我们需要创建这样的目录呢?构建后会删除 /code 目录吗?它是构建期间的临时目录吗? 不,它不会,除非在 dockerfile 后面的某个地方有一个RUN rm -rf /code
。 “但是为什么我们需要创建这样的目录呢?”它是您的代码(项目)所在的位置。
@tkausl 嗨,我再次编辑了我的问题。你现在可以看到 docker-compose.yml 文件了。在这个文件中,带有 的行是挂载我们的本地目录。到图像目录/代码?为什么?我们为什么这样做?我的理解是如果我们改变本地目录的内容,那么它会映射到图像中的代码目录?
【参考方案1】:
RUN mkdir /code
这一行将在/
下创建一个名为code 的目录。该目录将包含当前驻留在主机上.
中的代码。
ADD ./mysite/requirements.txt /code/
将主机中的python requirements.txt 添加到容器内的code
目录中。
RUN pip install -r requirements.txt
在容器内安装需求。
ADD . /code/
将主机中的python代码添加到/code
目录内的容器中
volumes:
< - .:/code >
将主机上的当前目录挂载到容器/code
目录中。您可能想知道为什么要这样做,并且代码已经通过ADD . /code/
添加?
这是一种用于开发目的的巧妙技术。无需在每次更改 python 代码时都重新构建映像,而是可以挂载 python 代码,并且自动更改将在容器内可见。因此,只需要重新启动容器即可更改新的代码。
【讨论】:
太棒了!谢谢亚门克!很多书只是告诉我们如何去做,而不是为什么去做……谢谢你的解释!以上是关于RUN mkdir /code 和 ADD 是啥意思。 /代码/的主要内容,如果未能解决你的问题,请参考以下文章
the hash for the file is not present in the specified catalog file,是啥意
java+p+=+new+JPanel(new+GridLayout(5,3,0,15));啥意?