Dockerfile中的多个RUN条目之间的区别是什么:
FROM php:5.6-apache
RUN docker-php-ext-install mysqli
RUN apt update
RUN apt install git -y -q
Run Code Online (Sandbox Code Playgroud)
只有一个RUN条目?
FROM php:5.6-apache
RUN docker-php-ext-install mysqli && apt update && apt install git -y -q
Run Code Online (Sandbox Code Playgroud)
OBS.我不是问哪一个更好.我想知道这两种方法之间的所有差异.
每个RUN命令都会创建一个文件系统更改层,该更改由开始运行该命令的临时容器生成.(它有效地运行a docker run然后将结果打包docker diff到文件系统层中.)
这些图层有几个关键细节需要注意:
这两种方法的主要区别在于构建缓存和删除文件.如果您将源代码tgz的下载,tgz的提取,编译二进制文件以及删除tgz和源文件夹分成多RUN行,那么当您通过网络发送图像并将其存储在磁盘上时,即使您没有在最终容器中看到它,您将拥有图层中的所有源.你的图像会大得多.
当缓存太多时,缓存也可能是一件坏事.如果拆分apt update和apt install,然后在几个月之后添加一个新软件包以安装到第二个运行行,则docker将重用几个月的缓存,apt update并尝试安装几个月前的软件包,可能不再可用,并且您的映像可能会失败建立.许多人也在rm -rf /var/lib/apt/lists/*安装debian软件包后运行.如果您在单独的步骤中执行此操作,则实际上不会删除先前图层中的文件,因此您的图像不会缩小.
| 归档时间: |
|
| 查看次数: |
76 次 |
| 最近记录: |