python - Dockerfile,如何减小更改层的大小?

标签 python docker dockerfile

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

/app
  /static_files
     /a.params
     /b.params
     /dynamic1.py
     /dynamic2.py
  /static_folders
     /dynamic1.py
     /dynamic2.py
     /dynamic3.py
     /folder1
  /dynamic1
     /dynamic.py
  /dynamic2
     /dynamic.py
  run.py
  requirements.txt
Dockerfile是
FROM nvidia/cuda:10.1-devel as base
WORKDIR /app

RUN apt update && apt install python3-pip -y && rm -rf /var/lib/apt/lists/*
RUN pip3 install --upgrade pip

COPY requirements.txt .
RUN pip3 install -r requirements.txt

COPY . .
RUN make
CMD ["python3","run.py"]
实际上,我在run.py中修改了一些代码然后将其发布,用户应拉取300MB以上的镜像。
提前致谢。

最佳答案

如果我理解正确,那么您想利用Docker层来减少发布容器更新时需要提取的字节。
为了实现这一点,您应该分割图层,以使静态(可能很大)文件相对于动态(可能很小)文件位于单独的层中。
您可以通过拥有一个专用的static文件夹并发出2个单独的COPY来实现此目的:一个用于静态目录,另一个用于其他所有内容(请注意排除静态目录本身!)。
鉴于您当前的结构将静态和动态资源混合在一起,这会有点麻烦,因为您不能仅使用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),并且还会导致一堆层,而不是仅两个不同的静态层与动态层。因此,从长远来看,更改项目结构是否可以作为一项有值(value)的投资可能值得评估。

关于python - Dockerfile,如何减小更改层的大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63844151/

相关文章:

python - numpy 3D meshgrid 仅作为 View

docker - Docker容器在CoreOS中消失了一段时间

docker - 如何在 Docker 容器中设置 Core 文件大小?

python - 为简约的 Python 脚本创建一个简单的 GUI

一行中的python多个 'for'语句

java - Spring Boot无法连接MySQL并在Docker/Docker compose中退出

docker - 更改日志级别以在服务器中的docker-compose文件中调试后会发生什么?我如何开始调试

docker 容器内的 docker

rest - Docker : java.net.ConnectException:连接被拒绝 - 在端口 8083 上运行的应用程序无法访问端口 3000 上的其他应用程序

python - 这个 tensorflow 安装有什么问题?我已经安装了GPU版本的tensorflow