docker安装使用系列七之docker瘦身

       对于docker的使用相信大家现在不会太陌生,但是有时候我们封装的docker都会很大很臃肿,这样不利于我们docker移植,常见的解决方法如下:

(1)构建时

      这一步,显而易见是在构建docker时,就开始考虑后面封装的docker大小问题了。

》选择正确的基础镜像

选择合适的基础镜像是构建 Docker 镜像时的一项基本决策。基础镜像是应用程序的起点,提供基本的操作系统和依赖项。考虑使用来自 Docker Hub 等可信来源的官方镜像,因为它们会定期更新并由社区维护。选择简约的基础镜像,以优化镜像大小。Alpine Linux 因其轻量级特性而备受青睐。

# Use a minimal Alpine Linux base image
FROM alpine:latest 


》使 layers 减到最少

Docker 镜像由多个 layers 组成,每一层都会带来额外的开销。最少的 layers 有助于减小镜像大小并加快部署速度。将相关命令分组到单个 RUN 指令中,并使用多阶段构建将构建依赖项与最终镜像分开。这确保了生产镜像中只包含必要的工件。

# Multi-stage build example
# Build stage
FROM node:14 as build
WORKDIR /app
COPY . .
RUN npm install
RUN npm run build
 
# Production stage
FROM nginx:alpine
COPY --from=build /app/dist /usr/share/nginx/html

 》使用 .dockerignore

与 .gitignore 类似,.dockerignore 文件允许你指定要从构建上下文中排除的文件和目录。通过防止不必要的文件添加到镜像中,可以进一步缩小镜像的大小。常见的排除文件包括 node_modules、.git 和临时文件。

node_modules
.git
*.log

》优化 Dockerfile 指令

注意 Dockerfile 中指令的顺序。将不太可能改变的指令(如安装依赖项)放在开头。这允许 Docker 在后续构建过程中重复使用缓存层,从而加快进程。将变化较频繁的指令(如复制应用程序代码)放在文件末尾。

# Reorder instructions for caching benefits
FROM node:14
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .

》谨慎更新依赖项

定期更新应用程序依赖项,以利用最新功能、性能改进和安全补丁。不过,要谨慎行事,彻底测试更新,以避免出现兼容性问题。Pin 在 Dockerfile 中的版本,以确保开发、测试和生产环境的一致性。

# Pin versions for stability
FROM node:14

(2)构建后

     当你想对已经封装好的docker进行压缩时,这时候就需要借助一些基础工具来实现了,以下是一些可帮助您优化 Docker 镜像的开源工具。您可以选择一个工具,并将其作为 Docker 镜像管道的一部分,以确保仅为应用程序部署创建优化的镜像。

比如:

使用docker-squash工具压缩如下,安装

 pip install docker-squash

查看镜像的历史改变记录

docker history xxx

压缩

docker-squash -f 25 -t banner:new banner:latest  #压缩25层
#####命令形式如下
docker-squash -f <镜像号> -t banner:new banner:latest  #从前压缩到指定的这一层

中间同时可以借助使用dive 工具查看镜像效率参数。

原文链接:

1、6 种减小 Docker 镜像大小的方法_自己制作的docker 太大-优快云博客

2、https://blog.youkuaiyun.com/SEAL_Security/article/details/136870011

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xiaomu_347

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值