Python Dockerfile,如何减少更改层的大小?

Python Dockerfile,如何减少更改层的大小?,python,docker,dockerfile,Python,Docker,Dockerfile,我有一个项目,有一些大文件和文件夹。有些文件大多是静态(*.params)。现在我希望将静态文件/文件夹作为独立层发布。下面是我的项目结构 /app /静态文件 /a、 params /b、 params /动态1.py /动态C2.py /静态文件夹 /动态1.py /动态C2.py /动态3.py /折叠1 /动态1 /dynamic.py /动态2 /dynamic.py run.py requirements.txt Dockerfile是 来自nvidia/cuda的:10.1-de

我有一个项目,有一些大文件和文件夹。有些文件大多是静态(*.params)。现在我希望将静态文件/文件夹作为独立层发布。下面是我的项目结构

/app
/静态文件
/a、 params
/b、 params
/动态1.py
/动态C2.py
/静态文件夹
/动态1.py
/动态C2.py
/动态3.py
/折叠1
/动态1
/dynamic.py
/动态2
/dynamic.py
run.py
requirements.txt
Dockerfile是

来自nvidia/cuda的
:10.1-devel作为基础
WORKDIR/app
运行apt update&&apt install python3 pip-y&&rm-rf/var/lib/apt/lists/*
运行pip3安装--升级pip
复制requirements.txt。
运行pip3安装-r requirements.txt
复制
跑牌
CMD[“python3”,“run.py”]
实际上,我在run.py中修改了一些代码,然后发布了,用户应该将图像拉到300MB以上


提前感谢。

如果我正确理解了您的问题,您希望利用Docker层减少在发布容器更新时需要提取的字节数

为了实现这一点,您应该分割层,以便静态(可能是大的)文件与动态(可能是小的)文件位于单独的层中

您可以通过拥有一个专用的
static
文件夹来实现这一点,并发布两个单独的
COPY
:一个用于静态目录,另一个用于所有其他内容(注意排除静态目录本身!)

考虑到您当前的结构混合了静态和动态资源,这就有点麻烦了,因为您不能只
复制
和整个文件夹并使用它。在您的情况下,命令应该类似于:

# Preparing layers for static resources
COPY static_files/*.param static_files/
COPY static_folders/folder* static_folders/

# Copying the rest of the resources
COPY static_files/*.py static_files/
COPY static_folders/*.py static_folders/
COPY dynamic* run.py requirements.txt .

然而,这是非常笨拙和容易出错的(当您使用新的名称模式添加新的静态资源时,您很容易忘记调整Dockerfile),并且还将导致一堆层,而不仅仅是两个不同的静态层和动态层。因此,从长远来看,改变项目结构是否是一项有价值的投资可能值得评估。

谢谢,我将改变我的项目结构以适应这一点。