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));啥意?

mkdir 是啥

JAVA语言如何进行异常处理,关键字:throws,throw,try,catch,finally分别代表啥意

Linux里面mkdir加不加-p的区别是啥?

重新捡起flask