优化 Windows Dockerfile

本文探讨了如何优化Windows Dockerfile以减小映像大小和提高生成速度。建议包括将操作分组到单个`RUN`指令以减少层数量,删除不再需要的文件以节省空间,以及明智地安排指令顺序来利用缓存。通过示例,展示了不同策略如何影响容器映像的构建和性能。

有几种方法可用来优化 Docker build 过程和生成的 Docker 映像。 本文档详细介绍了 Docker build 过程的操作原理,并演示了使用 Windows 容器创建最佳映像所用的几种策略。

Docker Build

映像层

在检查 Docker build 优化之前,请务必了解 Docker build 的工作原理。 在 Docker build 过程中,会占用 Dockerfile 并且在其自身临时的容器中一对一地运行每个可操作的指令。 结果是,每个可操作的指令都有一个新映像层。

看一看以下 Dockerfile。 在此示例中,正在使用 windowsservercore 基本操作系统映像,安装 IIS,然后创建一个简单的网站。

复制

# Sample Dockerfile

FROM windowsservercore
RUN dism /online /enable-feature /all /featurename:iis-webserver /NoRestart
RUN echo "Hello World - Dockerfile" > c:\inetpub\wwwroot\index.html
CMD [ "cmd" ]

从此 Dockerfile 来看,可预计生成的映像含有两个层:一个用于容器操作系统映像,另一个包括 IIS 和网站,但是这里不是这样的。 新映像由多个层构成,每个层依赖于前者。 若要形象地说明这一点,可以针对新映像运行 docker history 命令。 这样可以显示映像由四个层组成:基层和其他三个附加层。每个层在 Dockerfile 中都对应一条指令。

复制

docker history iis

IMAGE               CREATED              CREATED BY                                      SIZE                COMMENT
f4caf476e909        16 seconds ago       cmd /S /C REM (nop) CMD ["cmd"]                 41.84 kB
f0e017e5b088        21 seconds ago       cmd /S /C echo "Hello World - Dockerfile" > c   6.816 MB
88438e174b7c        About a minute ago   cmd /S /C dism /online /enable-feature /all /   162.7 MB
6801d964fda5        4 months ago                                                         0 B

每个层都可以映射到 Dockerfile 的一条指令。 底层(本示例中为 6801d964fda5)代表基本操作系统映像。 上面一层,可以看到 IIS 安装。 下一层包括新的网站,依次类推。

可以编写 Dockerfiles,以最小化映像层、优化生成性能,也可以优化修饰性的项目,例如可读性等。 完成相同的映像生成任务基本上有多种方式。 了解 Dockerfile 的格式如何影响生成时间和生成的映像,以及如何提升自动化体验。

优化映像大小

构建 Docker 容器映像时,映像大小可能是一个重要因素。 容器映像在注册表和主机之间移动、导出和导入,最终占用了空间。 在 Docker build 过程中,可采用几种策略尽可能减小映像大小。 本部分详细介绍一些特定于 Windows 容器的策略。

有关 Dockerfile 最佳做法的附加信息,请参阅 Best practices for writing Dockerfiles on Docker.com(在 Docker.com 上编写 Dockerfile 的最佳做法)。

组相关的操作

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值