我正在尝试在docker中运行一个简单的Flask应用程序。但是似乎即使我更新了app.py代码并重新启动docker容器也没有任何更新。
我在OS X上运行docker。这是否是我所缺少的简单东西,或者这是预期的行为?
这是我的docerfile的样子:
FROM ubuntu:14.04.3
# install dependencies
RUN apt-get update
RUN apt-get install -y nginx
RUN apt-get install -y supervisor
RUN apt-get install -y python3-pip
# update working directories
ADD ./app /app
ADD ./config /config
ADD requirements.txt /
# install dependencies
RUN pip3 install -r requirements.txt
# setup config
RUN echo "\ndaemon off;" >> /etc/nginx/nginx.conf
RUN rm /etc/nginx/sites-enabled/default
RUN ln -s /config/nginx.conf /etc/nginx/sites-enabled/
RUN ln -s /config/supervisor.conf /etc/supervisor/conf.d/
EXPOSE 80
CMD ["supervisord", "-n"]
Run Code Online (Sandbox Code Playgroud)
Docker 映像(您将获得docker build -t app .)是一个“冻结的”快照。它不可编辑;它是您在该时间点添加到映像的任何内容的快照。
现在,运行图像后,内容将被扩展(就像解压缩存档一样),然后您在图像中定义的过程就会运行。这是一个容器。
正在运行的容器可以显示为docker ps,图像(可以用来运行新容器的内容)可以显示为docker images。
容器可以写入文件系统,但是默认情况下,一旦容器停止,所有更改都将丢失。这些更改不会存储回映像。
在重建图像之前,图像是不可变的,并且容器将继续使用其原始图像。因此,使用导入app.py的Dockerfile方法,您需要运行以下命令来更新该文件:
docker build -t app .
docker stop <container_id>
docker rm <container_id>
docker run -p 80:80 -d --name=my-app app
Run Code Online (Sandbox Code Playgroud)
您需要运行docker ps -a以获取当前的容器ID。通过命名容器,您可以通过“ my-app”或以后选择的任何其他名称来引用它。
请注意,这是进行更新的缓慢方法。为了提高开发效率,请使用一个卷(对于MacOS,该卷必须位于/ Users下):
docker run -p 80:80 -v $(pwd)/app:/app -d --name=my-app app
Run Code Online (Sandbox Code Playgroud)
现在,只要您更新应用文件夹,就可以重新启动python(假设其中不包含自动重新加载):
docker restart my-app
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1414 次 |
| 最近记录: |