假设我有一个以下Python代码:
#!/usr/bin/pyton3
import time
while(True):
print("Hello World")
time.sleep(1)
使用上面的Python代码,我使用dockerfile创建了一个docker镜像pythondocker
。现在dockerfile包含许多需要先安装然后构建映像的软件包。构建映像后,我可以轻松启动/停止容器。
现在我的问题是,例如,我对我的Python代码做了一些更改,我想用新的更改更新docker image pythondocker
。我怎样才能做到这一点。一种方法是fisrt停止容器,然后删除图像并再次构建它。但是再次构建映像需要一些时间,因为它将再次安装所有软件包。有什么办法可以阻止图像而不是删除它然后将更改应用到当前图像,或者可以构建图像但不安装dockerfile中提到的包/依赖项。
您的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
以下的行,并且在第一次构建图像时,上面的行只安装一次。
根据Dockerfile的分层方式,您可以再次构建图像(不删除它)。它将尽可能使用缓存。
当层(行)中的文件没有改变并且前面的层(行)也没有改变时,Docker将使用缓存。因此,如果你的python代码位于Dockerfile的底部,它应该只构建这个层。哪个应该快。
之后,您可以再次运行您的图像。
您应该使用docker-compose文件构建docker镜像。
只需按照任何教程了解如何使用docker-compose。
然后在没有任何手动删除的情况下,您可以使用以下命令重新构建并重新运行所有图像。
构建所有图像
docker-compose build
构建并运行所有容器
docker-compose up -d
我已经为docker列出了一些日常有用的命令,看看https://rohanjmohite.wordpress.com/2017/08/04/docker-daily-useful-commands/