首页 > 其他分享 >Docker镜像优化

Docker镜像优化

时间:2024-12-26 16:31:57浏览次数:6  
标签:RUN .. go 镜像 Docker COPY 优化

1、概述

  Docker 作为一款广受欢迎的容器化技术,为开发者提供了极大的便利。它能够将应用程序以及其全部的依赖项整合并打包,形成一个标准化的独立单元 —— 镜像。对 Docker 镜像进行优化意义非凡,一方面可以显著降低镜像的存储空间占用,进而大幅提升其下载与部署的速率;另一方面,还能有效强化系统的安全性,为应用的稳定运行保驾护航。

  在本文中,我们将探讨一系列切实可行的 Docker 镜像优化技巧,助力开发者轻松掌握这一关键技能,为构建高效、可靠的容器化应用奠定坚实基础,让您的开发与部署流程更加顺畅无阻,全面提升应用的性能表现与安全保障。

2、Docker镜像优化技巧

2.1 使用合适的基础镜像

选择合适的基础镜像是优化 Docker 镜像的重要一步。尽量选择体积小、功能简单的基础镜像。

示例,以下是一个使用 alpine 作为基础镜像的 Dockerfile 示例:

# 使用 alpine 作为基础镜像
FROM alpine:3.15

# 安装必要的依赖
RUN apk add --no-cache python3 py3-pip

# 设置工作目录
WORKDIR /app

# 复制应用文件
COPY . .

# 安装 Python 依赖
RUN pip install -r requirements.txt

# 启动应用
CMD ["python3", "app.py"] 

2.2 合并 RUN 指令

每个 RUN 指令都会创建一个新的层,增加镜像的大小。通过合并多个 RUN 指令,可以减少镜像的层数,进而减少镜像的体积。

示例:

# 不推荐的做法:多层构建
RUN apk add --no-cache git
RUN apk add --no-cache curl

# 推荐的做法:合并 RUN 指令

RUN apk add --no-cache git curl

2.3 清理不必要的文件

在构建镜像的过程中,可能会生成一些不必要的文件或缓存。可以在 Dockerfile 中使用清理命令来减小镜像体积。

示例:

# 安装依赖并清理缓存
RUN apk add --no-cache git curl && rm -rf /var/cache/apk/*

2.4 使用 .dockerignore 文件

与 .gitignore 文件类似,.dockerignore 文件可以用来排除不必要的文件和目录,避免将它们包含在镜像中。这有助于减小镜像体积,并加快构建速度。

示例,在项目根目录下创建一个 .dockerignore 文件,内容如下:

# 排除不必要的文件和目录
*.log
node_modules/

2.5 使用多阶段构建

多阶段构建允许你在一个 Dockerfile 中使用多个 FROM 指令,从而只将所需的文件复制到最终镜像中。这种方法可以显著减小镜像体积。详细介绍参见《Docker中Dockerfile多From 指令存在的意义》这篇博文。

示例:

# 第一阶段:构建应用
FROM golang:1.22 AS builder

#RUN #go env -w GOPROXY=https://goproxy.cn,direct
# Run this with docker build --build_arg $(go env GOPROXY) to override the goproxy
#ARG goproxy=https://goproxy.cn,direct
#ENV GOPROXY=$goproxy

WORKDIR /workspace

COPY ../../apis apis/
COPY ../../clients clients/
COPY ../../cmd cmd/
COPY ../../pkg/controllers controllers/
COPY ../../pkg pkg/
COPY ../../pkg/constant constant/
COPY ../../swaggerDocs swaggerDocs/
COPY ../../go.mod go.mod
COPY ../../go.sum go.sum
RUN go mod tidy && go mod vendor
# Do not force rebuild of up-to-date packages (do not use -a) and use the compiler cache folder RUN CGO_ENABLED=0 GOOS=linux GOARCH=${TARGETPLATFORM} go build -o /workspace/ke ./cmd/ke # 第二阶段:创建最终镜像 FROM alpine:3.19 WORKDIR / COPY --from=builder /workspace/ke /bin/ke ENTRYPOINT ["/bin/ke"] 

2.6 使用标签和版本控制

给镜像打上标签,可以方便地进行版本控制和管理,避免混淆不同版本的镜像。

示例:

# 构建镜像并打标签
docker build -t helloworld:1.0 .

3、总结

  在容器化应用的浪潮中,优化 Docker 镜像对于提升应用性能和安全性意义非凡。选择合适基础镜像是关键起点,如同搭建稳固根基,能有效控制镜像的规模与功能范畴。巧妙合并相关指令,可避免镜像层不必要的增多,切实缩减体积。构建过程中,及时清理冗余文件,剔除无实际作用的元素,为镜像 “瘦身”。合理运用.dockerignore 文件,精准排除无关文件和目录,加速构建并减少无用负载。采用多阶段构建策略,分步筛选,仅保留最终运行的必要组件,降低复杂性并提升效率。

  遵循 “容器镜像应仅含应用程序及其运行时依赖项” 的原则,运用这些优化技巧,让 Docker 镜像更加精简高效,为容器化应用的平稳、快速部署保驾护航,助力开发者充分发挥 Docker 技术优势,推动应用开发与部署向高质量发展迈进。

参考:《distroless 镜像介绍及调试基于distroless 镜像的容器

参考:《Docker中Dockerfile多From 指令存在的意义

标签:RUN,..,go,镜像,Docker,COPY,优化
From: https://www.cnblogs.com/zhangmingcheng/p/18633410

相关文章

  • 在 Docker 中部署 Jenkins,并完成项目的构建和发布
    前言Jenkins的主要作用是帮助你,把需要在本地机器完成的Maven构建、Docker镜像发布、云服务器部署等系列动作全部集成在一个服务下。简化你的构建部署操作过程,因为Jenkins也被称为CI&CD(持续集成&持续部署)工具。提供超过1000个插件(Maven、Git、NodeJs)来支持构......
  • 问答网文章优化:提升质量与吸引力的实战策略
    在互联网时代,问答网站如知乎、Quora、98问答等已成为知识分享、问题解决的重要平台。对于内容创作者而言,如何在问答网上发布高质量、高吸引力的文章,不仅关乎个人品牌的建立,也直接影响到文章的曝光度、互动率以及长期价值。本文旨在探讨问答网文章优化的策略,帮助创作者提升文章......
  • Kubernetes 为什么减少对 Docker 的依赖:容器运行时演进背后的技术考量
    1、概述在当今的技术领域,容器技术的崛起与发展离不开Docker和Kubernetes的紧密合作。Docker以其创新性的容器化技术,推动了容器在全球范围内的广泛应用,为开发者提供了从容器镜像构建、容器启动与管理到镜像分发等一站式服务。Kubernetes则专注于大规模容器的编排和自动......
  • Next.js 14 性能优化:从首屏加载到运行时优化的最佳实践
    在现代Web应用中,性能优化直接影响用户体验和业务转化。Next.js14提供了多种内置的性能优化特性,今天我们就来深入探讨如何充分利用这些特性,以及一些实用的优化技巧。图片和字体优化1.图片优化Next.js的Image组件供了强大的图片优化功能://components/OptimizedIm......
  • 新能源汽车门店运营优化:项目管理工具的实践与探索
    项目管理工具在新能源汽车门店运营中发挥着至关重要的作用,它们通过优化任务管理、增强团队协作、提升资源利用效率以及加强数据分析与决策支持等多个方面,显著提升了门店的运营效率。以下是对这些方面的详细阐述:一、优化任务管理项目管理工具能够帮助新能源汽车门店清晰地列出所......
  • 水库水位监测系统与气象数据结合:优化水库管理决策
    在水库管理领域,传统的单一水位监测方式已难以满足日益复杂的水资源调配和安全保障需求。如今,将水库水位监测系统与气象数据紧密结合,正成为优化水库管理决策、提升水资源利用效率和保障水库安全运行的关键手段。一、水库水位监测系统的基石作用水库水位监测系统是水库管理的......
  • 【无人机】无人机测绘路径优化策略与实践:探索高效、精准的测绘技术路径
    ......
  • 上交团队发表研究,通过组织学图像预测肿瘤微环境,优化癌症预后预测|顶刊精析·24-12-26
    小罗碎碎念今天分享的这篇文章于2024-05-21发表于CellReportsMedicine。这篇文章介绍了一个深度学习系统,该系统能够通过分析组织学图像来预测肿瘤微环境(TME),并提高癌症患者的预后准确性。角色姓名单位名称(中文)第一作者RuitianGao上海交通大学生命科学与生物技术学院......
  • 国内ChatGPT中文版镜像网站整理合集【12月持续更新】
     一、ChatGPT中文镜像站① https://chat.lify.vip支持GPT4、4o和o1,支持MJ绘画②Github项目:ChatGPT中文版镜像网站 支持GPT-4、4o和o1什么是镜像站   镜像站(MirrorSite)是指通过复制原始网站内容和结构,创建的备用网站。其主要目的是在原始网站无法访问时,提供相......
  • 提升网站流量的秘密:SEO关键词优化与长尾关键词解析
    内容概要在数字化时代,网站流量的提升与搜索引擎优化(SEO)密切相关。SEO不仅是指通过技术手段提升网站在搜索引擎中的排名,更是优化用户体验及内容质量的重要环节。关键词优化作为SEO的核心组成部分,能够有效帮助网站吸引目标访客,从而增加页面的曝光率和转化率。首先,关键词优化的......