假设我有一个以下Python代码:
#!/usr/bin/pyton3
import time
while(True):
print("Hello World")
time.sleep(1)
使用上面的Python代码我使用dockerfile创建了一个docker image pythondocker
。现在dockerfile包含许多需要先安装然后构建映像的软件包。构建图像后,我可以轻松地启动/停止容器。
现在我的问题是,例如,我对Python代码进行了一些更改,并且我希望使用新更改更新docker image pythondocker
。我怎样才能做到这一点。一种方法是fisrt停止容器,然后删除图像并再次构建它。但是再次构建映像需要一些时间,因为它将再次安装所有软件包。有什么方法可以阻止图像而不是删除它然后将更改应用到当前图像,或者可以构建图像但不安装dockerfile中提到的包/依赖项。
答案 0 :(得分:3)
您的Dockerfile可能如下所示:
FROM python:2
RUN apt-get install libxxx
ADD requirememts.txt /
RUN pip install -r /requirements.txt
ADD main.py /usr/src/app
WORKDIR /usr/src/app
RUN pip install -r /usr/src/app/requirements.txt
CMD ["python", "main.py"]
您只需运行docker build -t some_tag .
即可。只会重新安装/升级ADD main.py /usr/src/app
以下的行,并且首次构建图像时,上面的行只安装一次。
答案 1 :(得分:1)
根据Dockerfile的分层方式,您可以再次构建图像(不删除它)。它会尽可能使用缓存。
当图层(行)中的文件没有改变且前面的图层(行)也没有改变时,Docker将使用缓存。因此,如果你的python代码位于Dockerfile的底部,它应该只构建这个层。哪个应该快。
之后,您可以再次运行您的图像。
答案 2 :(得分:1)
您应该使用 docker-compose 文件构建泊坞窗图像。
请按照任何有关如何使用docker-compose的教程。
然后在没有任何手动删除的情况下,您可以使用以下命令重新构建并重新运行所有图像。
构建所有图片
docker-compose build
构建并运行所有容器
docker-compose up -d
我已经为docker列出了一些日常有用的命令,看看 https://rohanjmohite.wordpress.com/2017/08/04/docker-daily-useful-commands/