当前位置: 代码网 > 服务器>服务器>云虚拟主机 > 一些常见的精简Docker file规则总结

一些常见的精简Docker file规则总结

2024年11月26日 云虚拟主机 我要评论
前言在编写 dockerfile 时,精简规则不仅有助于减小镜像大小,还能提高构建速度和可维护性。以下是一些常见的精简 dockerfile 规则:1.尽量合并run指令每个run指令会产生一个新的镜

前言

在编写 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精简规则内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com