如何更新docker镜像

时间:2017-12-22 09:19:09

标签: python image docker

假设我有一个以下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中提到的包/依赖项。

3 个答案:

答案 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/