对于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 镜像管道的一部分,以确保仅为应用程序部署创建优化的镜像。
- Dive:它是一个镜像资源管理器工具,可帮助您发现 Docker 和 OCI 容器镜像中的层。使用 Dive,您可以找到优化 Docker 镜像的方法。查看 Dive Github 存储库了解更多详细信息。
- Docker Slim: 它可以帮助您优化 Docker 镜像的安全性和大小。有关更多详细信息,请查看 Docker Slim Github 存储库。您可以使用 Slim 将 docker 镜像大小减小到 30 倍。
- Docker Squash此实用程序可帮助您通过使用 squash 压缩镜像图层来减小镜像大小。在Docker CLI中使用squash标志也可以使用 squash 功能。
比如:
使用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