赛尔校园公共服务平台 Logo
平台使用
阿里云
百度云
移动云
智算服务
教育生态
登录 →
赛尔校园公共服务平台 Logo
平台使用 阿里云 百度云 移动云 智算服务 教育生态
登录
  1. 首页
  2. 阿里云
  3. 容器镜像服务
  4. 操作指南
  5. 镜像构建
  6. Dockerfile优化推荐功能

Dockerfile优化推荐功能

  • 镜像构建
  • 发布于 2025-04-18
  • 0 次阅读
文档编辑
文档编辑

容器镜像服务ACR针对企业版实例运行的构建任务,提供了Dockerfile优化推荐功能,可以帮助您找出Dockerfile中的潜在问题,以提高容器镜像的质量。该功能不会对镜像构建功能产生任何影响,并且您无需进行任何操作,就可以在构建日志中查看优化推荐的结果。本文介绍如何根据Dockerfile优化推荐的结果找出Dockerfile中的潜在问题,以进一步提高容器镜像的质量,满足企业级应用的需求。

背景信息

使用企业版构建服务,容器镜像服务可以在镜像构建前自动对构建的Dockerfile进行优化推荐。优化推荐功能会根据语法规则以及最优实践规则进行分析,最后输出分析结果。关于语法规则的更多内容,请参见官方语法规则。

分析结果分为Error和Warning两种等级:

  • Error:Dockerfile中存在语法错误或容器镜像服务不支持的构建参数,此类问题将导致镜像构建出错,需要进行改正。

  • Warning:Dockerfile中存在潜在问题,可能导致构建产生非预期的结果或者镜像存在冗余数据。

分析结果格式

语法检测结果

[Error] <Error message> at line <line number>: <Specific instruction content>
[Warning] <Warning message> at line <line number>: <Specific instruction content>
[Error] [Rule <Rule id>] <Error message> at line <line number>: <Specific instruction content>
[Warning] [Rule <Rule id>] <Warning message> at line <line number>: <Specific instruction content>

示例1

存在语法错误的Dockerfile。

# FROM指令使用了不支持的架构的基础镜像,并且没有指定多阶段构建的名称
FROM --platform=windows alpine as
# RUN指令使用了不支持的运行参数
RUN --security=insecure cat /proc/self/status | grep CapEff
# ADD指令缺少目的路径
ADD https://mirrors.edge.kernel.org/pub/linux/kernel/Historic/linux-0.01.tar.gz
# COPY指令不支持拷贝远程文件
COPY https://mirrors.edge.kernel.org/pub/linux/kernel/Historic/linux-0.01.tar.gz linux-0.01.tag.gz
# COPY/ADD拷贝的源文件路径在构建路径下不存在
COPY  <不存在的路径> /somedir/
# 错误的指令名称
CPY /foo /bar

语法检测结果输出。

[parse stage begin.]
[Error] Unsupported target architecture at line 2: windows.
[Error] Lack of stage name at line 2.
[Error] Unsupported security mode at line 4: insecure.
[Error] Lack of dest at line 6.
[Error] COPY does not support remote links. Please use the ADD instruction at line 8: https://mirrors.edge.kernel.org/pub/linux/kernel/Historic/linux-0.01.tar.gz.
[Error] Source path is not exist at line 10: <不存在的路径>.
[Error] Unknown instruction at line 12: CPY.
[Warning] No tag specified at line 2: from ["--platform=windows"] "alpine" "as".
[parse successfully, takes 0s.]

示例2

违背了最优实践规则的Dockerfile。

# 未指定镜像版本
FROM alpine AS a
# 安装软件包后未清除缓存
RUN apk add gcc
# 未指定镜像版本,使用了已有的阶段名
from ubuntu as a
# 安装软件包后未清除缓存,未使用--no-install-recommends避免下载不必要的软件包
RUN apt-get install -y gcc

语法检测结果输出。

[parse stage begin.]
[Warning] [Rule1003]When installing software with apt-get, it is recommended to include the --no-install-recommends parameter at line 8: RUN apt-get install -y gcc .
[Warning] No tag specified at line 2: FROM alpine AS a .
[Warning] No tag specified at line 6: from ubuntu as a .
[Warning] [Rule1001]Using a base image with a specific tag instead of the latest image.
[Error] Duplicate stage names with line 2: a at line 6: from ubuntu as a .
[Error] [Rule1014]Do not use duplicate stage names.
[parse successfully, takes 0s.]

检测规则

最优实践规则

规则编号

提示等级

构建规则

推荐操作

R1001

Warning

基础镜像避免使用Latest标签镜像。

为您的基础镜像指定特定版本的镜像。

R1002

Warning

避免将apt-get update, apt-get upgrade与apt-get install指令分散在不同指令中。

将apt-get update, apt-get upgrade与apt-get install指令合并在同一条RUN指令中进行。

R1003

Warning

使用apt-get下载软件时,添加--no-install-recommends避免下载不必要的软件包。

在apt-get install指令中添加--no-install-recommends指令。

R1004

Warning

下载安装包后清空缓存,可以缩小镜像体积。

  • 在apt-get指令后添加apt-get clean、rm -rf /var/lib/apt/lists/*指令。

  • 在apk指令后添加rm -rf /var/cache/apk/*指令。

  • 在apk add指令中添加--no-cache参数。

  • 在yum指令后添加yum clean指令。

R1005

Warning

使用多阶段构建处理编译命令,可以缩小镜像体积。

对于make、go build等指令,将其放入单独的阶段进行编译,将编译结果拷贝进入业务镜像,如:

FROM alpine:3.17 as complie
COPY <source code> code/
RUN make
FROM alpine:3.17
COPY --from=compile /code/bin bin/

R1006

Warning

WORKDIR指定工作目录时,使用相对路径可能会导致使用的路径与预期不一致。

将相对路径改为绝对路径。

R1007

Error

在构建过程中使用Kill、Shutdown等指令会导致安全及稳定性问题。

去除相关指令。

R1008

Warning

在构建中使用Root用户,会导致容器在运行时存在安全性问题。

避免使用Root用户。

R1009

Warning

在构建中使用CD指令指定工作目录不会在容器运行时生效。

使用WORKDIR指令代替CD命令。

R1010

Error

在构建中使用Sudo命令是无效的。

去除sudo指令。

R1011

Error

使用EXPOSE暴露端口时,端口范围应在0~65535,协议为TCP或UDP。

使用合法的EXPOSE参数,如:8080,8081/tcp,8082/udp。

R1012

Error

使用COPY指令拷贝多个源文件时,目的路径应为目录。

确保目的路径格式为目录地址。

R1013

Error

使用COPY指令从其他构建阶段拷贝文件时,需要使用正确的阶段名。

确保阶段名是之前定义的阶段。

R1014

Error

使用多阶段构建时,阶段名不能重复。

避免使用重复的阶段名。

R1015

Error

Dockerfile中的首条指令应为FROM或ARG指令。

确保首条指令为FROM或ARG指令。

R1016

Warning

使用多条CMD指令时只有最后一条CMD指令会生效。

确保最后一条CMD指令为预期使用的指令。

R1017

Warning

使用多条ENTRYPOINT指令时只有最后一条ENTRYPOINT指令会生效。

确保最后一条ENTRYPOINT指令为预期使用的指令。

R1018

Error

使用ADD指令拷贝多个源文件时,目的路径格式应为目录地址。

确保目的路径格式为目录地址。

R1019

Warning

在解压之后删除压缩包,可缩小镜像体积。

将下载压缩包、解压压缩包和删除压缩包指令合并在同一条RUN指令中执行。

相关文章

使用企业版实例构建镜像 2025-04-18 15:16

容器镜像服务企业版提供安全且高效的源代码到容器镜像的自动化持续集成流程,并支持基于Dockerfile规则触发的自动构建镜像和镜像仓库提交功能。 前提条件

绑定源代码托管平台 2025-04-18 15:16

构建镜像前,您需要绑定一个源代码托管平台,便于您后续进行构建镜像等操作。 前提条件

构建多架构容器镜像 2025-04-18 15:16

使用ARM架构资源部署容器通常可以节省不少成本,但也可能导致维护成本增加,您可能需要面向x86、ARM架构分别构建镜像并设置不同的Tag。通过ACR控制台配置的多架构构建任务可以帮助您简化这一过程,您可以通过一个Tag来管理多种架构的镜像。 前提条件

使用VPC安全构建模式构建容器镜像 2025-04-18 15:16

容器镜像服务ACR提供了VPC安全构建模式,支持在云上VPC或云下IDC机房(通过高速通道打通到云上VPC)内自建GitLab(或Maven仓库等其它内网服务),且不露出公网访问入口。本文介绍如何使用ACR VPC安全构建模式来进行镜像构建。 前提条件

镜像构建的出公网IP列表 2025-04-18 15:16

自建GitLab需要使用到出公网IP,用于打通容器镜像服务企业版与自建GitLab的网络访问链路。容器镜像服务企业版提供了出公网IP,您可以在自建GitLab中为出公网IP开放白名单访问,从而可以使用自建GitLab构建镜像。本文介绍各个地域的出公网IP。

Dockerfile优化推荐功能 2025-04-18 15:16

容器镜像服务ACR针对企业版实例运行的构建任务,提供了Dockerfile优化推荐功能,可以帮助您找出Dockerfile中的潜在问题,以提高容器镜像的质量。该功能不会对镜像构建功能产生任何影响,并且您无需进行任何操作,就可以在构建日志中查看优化推荐的结果。本文介绍如何根据Dockerfile优化推

目录
Copyright © 2025 your company All Rights Reserved. Powered by 赛尔网络.
京ICP备14022346号-15
gongan beian 京公网安备11010802041014号