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

 更新时间:2024年11月08日 09:09:44   作者:甘北  
这篇文章主要介绍了一些常见的精简Docker file规则的相关资料,这些精简规则有助于优化Dockerfile,生成更高效、简洁的镜像,文中通过代码介绍的非常详细,需要的朋友可以参考下

前言

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

相关文章

  • Docker安装配置Oracle详细步骤记录(以作持久化处理)

    Docker安装配置Oracle详细步骤记录(以作持久化处理)

    docker是一个用Go语言实现的开源项目,可以让我们方便的创建和使用容器,下面这篇文章主要给大家介绍了关于Docker安装配置Oracle详细步骤的相关资料,需要的朋友可以参考下
    2024-03-03
  • 详解Docker挂载本地目录及实现文件共享的方法

    详解Docker挂载本地目录及实现文件共享的方法

    本篇文章主要介绍了详解Docker挂载本地目录及实现文件共享的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-12-12
  • docker实现MySQL主从双备的示例代码

    docker实现MySQL主从双备的示例代码

    本文主要介绍了docker实现MySQL主从双备,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-01-01
  • harbor修改自定义网络docker network方式

    harbor修改自定义网络docker network方式

    文章介绍了如何自定义Docker的docker0网桥和br-*****网桥的IP地址,以避免与公司内部地址冲突,步骤包括修改/etc/docker/daemon.json文件、重启Docker服务、查看和删除占用IP的网桥、创建自定义网桥、更新Harbor配置并重新部署
    2026-03-03
  • CentOS7 禁用Transparent Huge Pages的实现方法

    CentOS7 禁用Transparent Huge Pages的实现方法

    这篇文章主要介绍了 CentOS7 禁用Transparent Huge Pages的实现方法的相关资料,需要的朋友可以参考下
    2016-11-11
  • Docker容器访问挂载文件权限问题小结

    Docker容器访问挂载文件权限问题小结

    在使用docker-compose部署项目时,因为SELinux策略导致容器无法访问宿主机上挂载的文件,解决方案包括禁用SELinux、修改文件类型为svirt_sandbox_file_t或使用:Z选项挂载文件,本文介绍Docker容器访问挂载文件权限问题,感兴趣的朋友一起看看吧
    2025-02-02
  • k3d入门指南之在Docker中运行K3s的详细教程

    k3d入门指南之在Docker中运行K3s的详细教程

    在本文中,我们将简单了解k3d,这是一款可让您在安装了Docker的任何地方运行一次性Kubernetes集群的工具,此外在本文中我们还将探讨在使用k3d中可能会出现的一切问题,感兴趣的朋友跟随小编一起看看吧
    2021-05-05
  • 教你使用Jenkins集成Harbor自动发布镜像

    教你使用Jenkins集成Harbor自动发布镜像

    这篇文章主要介绍了Jenkins 集成 Harbor 自动发布镜像,主要包括Jenkins 脚本式发布镜像及Jenkins 插件式发布镜像的详细过程,本文结合图文实例给大家介绍的非常详细,需要的朋友可以参考下
    2022-04-04
  • Windows10下安装Docker的步骤图文教程

    Windows10下安装Docker的步骤图文教程

    这篇文章主要给大家分享Windows10下安装Docker的过程,本文图文并茂给大家介绍的非常详细,需要的朋友参考下
    2018-03-03
  • docker容器的文件拷贝方式小结

    docker容器的文件拷贝方式小结

    这篇文章主要给大家介绍了关于docker容器的文件拷贝方式,在使用Docker时,我们经常需要拷贝多个容器的文件系统,文中给出了详细的解决办法,需要的朋友可以参考下
    2023-08-08

最新评论