一些常见的精简Docker file规则总结
作者:甘北
前言
在编写 Dockerfile 时,精简规则不仅有助于减小镜像大小,还能提高构建速度和可维护性。以下是一些常见的精简 Dockerfile 规则:
1. 尽量合并 RUN 指令
每个 RUN
指令会产生一个新的镜像层,因此多个命令可以合并为一个 RUN
指令,减少镜像层数。
不推荐:
RUN yum -y update RUN yum -y install nginx RUN yum clean all
推荐:
RUN yum -y update && \ yum -y install nginx && \ yum clean all
2. 使用 && 连接命令
使用 &&
连接多个命令,确保只有在前一个命令成功时才执行后续命令,从而减少中间层。
推荐:
RUN apt-get update && apt-get install -y curl
3. 减少无关依赖
仅安装镜像运行所需的最少软件包,避免不必要的包被添加到镜像中。例如,只安装构建所需的工具,构建完成后再删除它们。
推荐:
RUN apt-get update && apt-get install -y \ build-essential \ && rm -rf /var/lib/apt/lists/*
4. 使用 COPY 而非 ADD
COPY
是更简单且明确定义的指令,仅用于复制文件。如果不需要解压或下载外部资源,应该使用 COPY
,而不是 ADD
,因为 ADD
会自动处理一些复杂的功能(如解压文件)。
推荐:
COPY myfile.txt /app/myfile.txt
5. 清理临时文件和缓存
在安装依赖后,删除临时文件和缓存,减少镜像大小。
推荐:
RUN apt-get update && apt-get install -y \ curl \ && rm -rf /var/lib/apt/lists/* \ && apt-get clean
6. 合理使用 .dockerignore
类似于 .gitignore
,使用 .dockerignore
文件忽略不必要的文件(如临时文件、日志、构建文件等)。这可以避免将不必要的文件包含在镜像中,减少镜像大小。
示例 .dockerignore
文件:
.git *.log *.md
7. 使用固定版本的基础镜像
使用固定版本(而非 latest
)的基础镜像,可以确保构建的镜像具有一致性和可重复性。latest
标签可能会在每次构建时获取不同版本的镜像,导致不一致的行为。
推荐:
FROM ubuntu:20.04
8. 删除无用文件
如果您在构建过程中生成了临时文件或不再需要的文件(例如下载的包、构建中间文件等),请及时删除它们。
推荐:
RUN curl -O https://example.com/file.tar.gz && \ tar -xzf file.tar.gz && \ rm -f file.tar.gz
9. 使用多阶段构建
使用多阶段构建来分离构建环境和运行环境。这样可以将构建所需的依赖和工具从最终镜像中移除,减小最终镜像的体积。
示例:
# 构建阶段 FROM node:14 AS builder WORKDIR /app COPY . . RUN npm install && npm run build # 运行阶段 FROM nginx:alpine COPY --from=builder /app/build /usr/share/nginx/html
10. 避免使用 apt-get upgrade 或 yum upgrade
避免使用 apt-get upgrade
或 yum upgrade
,因为这些操作会升级所有软件包,可能会导致不必要的包被安装,增加镜像的体积。
推荐: 在安装时只安装所需的包,避免进行系统升级:
RUN yum -y install nginx
总结
通过遵循这些精简规则,你可以确保 Dockerfile 高效、简洁,并且能够生成体积小、构建速度快的镜像。
到此这篇关于一些常见的精简Docker file规则总结的文章就介绍到这了,更多相关docker file精简规则内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!