请问这是必须的么,如果是这样的话,是要用docker compose-up 自动简化这个过程?
如果不是必须的话,因为我的dockerfile的问题么?
dockerfile如下:
FROM ubuntu
MAINTAINER Tarty.Phoenix <tartyphoenix@gmail.com>
RUN apt-get update
RUN apt-get install -y -q python-all python-pip libffi-dev
RUN apt-get install -y -q python-dev build-essential
ADD ./flask_pure/requirements.txt /tmp/requirements.txt
RUN pip install -qr /tmp/requirements.txt
ADD ./flask_pure /opt/flask_pure/
WORKDIR /opt/flask_pure
EXPOSE 80
CMD ["python", "manage.py", "runserver"]
首先 workdir 代表的目录是容器里面的目录,不是 host 的。
下面的内容变化需要重新 build image
dockerfile 本身变化
COPY / ADD 指令的 source 文件变化
docker-compose 支持运行的时候重新 build image 的
你的问题中,有一点需要和你解释。
通过创建和编辑dockerfile文件后,build创建一个image(镜像),而后run一个image产生一个container(容器),那么image和container是一一对应的关系了。那么当你编辑dockerfile文件改变workdir后,再去创建的container当然就是默认进入了新的workdir。因此你的问题的标题所描述的应该不是一个问题,而是正确的逻辑描述。
你对docker的理解错了,你这么做只是把某个文件夹的内容打包进镜像。
建议你了解一下docker中的VOLUME卷的概念,只有通过容器启动时指定-v参数或者在docker-compose.yml中指定VOLUME参数才能实现容器挂载本地目录。
那么如何区分是否需要容器挂载本地目录,我的理解是处于开发状态还是生产状态。
如果处于开发状态,则代码需要频繁变动,那么每修改一次代码都需要重新打包进镜像是很难接受的。
如果处于生产状态,想象一下Docker Hub上提供那么多的镜像吧,如果这些镜像都提供你一个安装环境和源代码,然后你需要手动指定VOLUME把源代码目录挂载进去,再然后启动容器就会进行编译安装,你会觉得这个的体验怎么样?