目前我正在复制预先下载的软件包,然后安装在docker镜像上。 COPY 图层当前与要复制的目录具有相同的大小。目录稍后将在另一层上删除。 Dockerfile如下所示:
COPY python-packages /tmp/python-packages
RUN pip install -f /tmp/python-packages --no-index <pkg-name> \
&& rm -rf /tmp/*
有没有办法复制文件而没有与正在复制的目录相同的图层?有什么方法可以减少COPY层的大小?
答案 0 :(得分:0)
不幸的是,到目前为止,您无法缩小尺寸或消除图层,RUN
,COPY
和ADD
每次都会创建一个图层。
您可以使用pip
直接从版本控制
e.g。 pip install git+https://git.example.com/MyProject#egg=MyProject
更多信息:https://pip.pypa.io/en/stable/reference/pip_install/#vcs-support
如果您的代码是私有的,并且将在您的专用网络或互联网上引入网络连接的需求,具体取决于代码的位置,在docker上,这将带来您必须访问pip
的缺点建立时间。
您还可以使用多阶段构建并在另一个docker镜像中安装带有pip
的python模块,然后将工件复制到最终的docker镜像。我强烈不建议这个,除非您别无选择并了解风险,因为您必须在安装过程中复制所有文件夹和/或文件pip
触摸并创建其他一些预期存在并且在最终的docker图像中获得权限的其他人,如果没有在pip
内部进行深度跳水并且从{{1}起很长时间内难以维持,这将很难实现。{{1可能会在将来更改其文件和文件夹位置和/或结构。
有关多阶段构建的更多信息:https://docs.docker.com/develop/develop-images/multistage-build/