Docker 的 Image 太大,怎么变小?

2024-06-11 06:58
文章标签 docker 怎么 image 变小

本文主要是介绍Docker 的 Image 太大,怎么变小?,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

铛~铛~铛~Docker即将颠覆整个软件产业,从云计算平台到软件开发、测试,整个SDLC都会极度依赖Docker。

圈子里面一定有很多讨论Docker的话题,简而言之,Docker其实只解决一个问题:

 

  QA:程序无法启动!!!

  DEV:不可能,我的机器上可以运行

 

大家可以慢慢体会以上对话。但无论怎样,对于已经投入 SSD 怀抱的同学们来说,要在宝贵的SSD上存放50个大小为800MB左右不等的Docker Image 是绝对不可以接受的!!但偏偏从 Docker Hub上下载到的Image,大部分都是这个数字,甚至远大于这个。看着逐渐被Docker侵蚀的磁盘空间,楼主决定给Docker文件进行大瘦身。结果发现效果很显著,请看下图

颤抖吧,凡人!100MB 的 Redis 压缩到只有7MB !!!

 

首先纠正一下基本概念:

1. Docker 不是虚拟机 (切记)

2. Docker 里面的程序运行时不需要完整的操作系统!

3. CoreOS,RHEL, Ubuntu, CentOS,等等等,它们都是一个操作系统!

 

怎么做到的,基本就是以下几个步骤

1. 使用 Busybox 的 Install 命令创建一个最小化的系统环境

2. 删除不必要的各种系统文件,具体哪些是不必要的,那就得需要具体程序具体分析,楼主花了大量时间来分析每个程序,现在楼主几乎可以把这些APP的依赖项倒着背出来。

3. 将这些文件打包成 rootfs.tar 

4. 使用 Dockerfile 的 ADD 指令用 rootfs.tar 生成 Image

 

楼主不码字了,开始码代码,

1. 基于 Redis 2.8.13 ,生成一个最简 rootfs.tar

复制代码
 1 FROM redis:2.8.13
 2 
 3 # switch to root to build image
 4 # =================================================
 5 USER root
 6 
 7 # prepare rootfs
 8 # =================================================
 9 RUN mkdir /rootfs
10 WORKDIR /rootfs
11 RUN mkdir bin etc dev dev/pts lib usr proc sys tmp
12 RUN mkdir -p usr/lib64 usr/bin usr/local/bin
13 RUN touch etc/resolv.conf
14 RUN cp /etc/nsswitch.conf etc/nsswitch.conf
15 RUN echo root:x:0:0:root:/:/bin/sh > etc/passwd
16 RUN echo root:x:0: > etc/group
17 RUN ln -s lib lib64
18 RUN ln -s bin sbin
19 
20 # install busybox
21 # =================================================
22 ADD http://busybox.net/downloads/binaries/1.21.1/busybox-x86_64 /sbin/busybox
23 RUN chmod +x /sbin/busybox
24 RUN cp /sbin/busybox bin
25 RUN busybox --install -s bin
26 
27 # extract redis-server
28 # =================================================
29 RUN cp /usr/local/bin/redis-server usr/bin/redis-server
30 
31 # extract redis-server's dependencies
32 # =================================================
33 RUN bash -c "cp /lib/x86_64-linux-gnu/lib{m,dl,pthread,c}.so.* lib64"
34 RUN cp /lib64/ld-linux-x86-64.so.2 lib64/
35 
36 # build rootfs
37 RUN tar cf /rootfs.tar .
复制代码

2. 使用这个 rootfs.tar 生成最小的Redis镜像文件

复制代码
1 FROM scratch
2 MAINTAINER e2tox <e2tox@microbox.io>
3 ADD rootfs.tar /
4 WORKDIR /data
5 VOLUME /data
6 # Define default command.
7 EXPOSE 6379
8 ENTRYPOINT ["/usr/bin/redis-server"]
9 CMD ["--port", "6379"]
复制代码

3. 运行一下试试

docker run --rm -it -p 6379:6379 microbox/redis

 

这个方法生成出来的镜像和普通的redis镜像没有任何区别,尽情使用,楼主已经先行释放了30GB的空间了。

如果你还有更多的探索欲望,请移步楼主的开源项目 http://microbox.io

这篇关于Docker 的 Image 太大,怎么变小?的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1050461

相关文章

使用Docker构建Python Flask程序的详细教程

《使用Docker构建PythonFlask程序的详细教程》在当今的软件开发领域,容器化技术正变得越来越流行,而Docker无疑是其中的佼佼者,本文我们就来聊聊如何使用Docker构建一个简单的Py... 目录引言一、准备工作二、创建 Flask 应用程序三、创建 dockerfile四、构建 Docker

SpringBoot+Docker+Graylog 如何让错误自动报警

《SpringBoot+Docker+Graylog如何让错误自动报警》SpringBoot默认使用SLF4J与Logback,支持多日志级别和配置方式,可输出到控制台、文件及远程服务器,集成ELK... 目录01 Spring Boot 默认日志框架解析02 Spring Boot 日志级别详解03 Sp

java实现docker镜像上传到harbor仓库的方式

《java实现docker镜像上传到harbor仓库的方式》:本文主要介绍java实现docker镜像上传到harbor仓库的方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录1. 前 言2. 编写工具类2.1 引入依赖包2.2 使用当前服务器的docker环境推送镜像2.2

怎么用idea创建一个SpringBoot项目

《怎么用idea创建一个SpringBoot项目》本文介绍了在IDEA中创建SpringBoot项目的步骤,包括环境准备(JDK1.8+、Maven3.2.5+)、使用SpringInitializr... 目录如何在idea中创建一个SpringBoot项目环境准备1.1打开IDEA,点击New新建一个项

qt5cored.dll报错怎么解决? 电脑qt5cored.dll文件丢失修复技巧

《qt5cored.dll报错怎么解决?电脑qt5cored.dll文件丢失修复技巧》在进行软件安装或运行程序时,有时会遇到由于找不到qt5core.dll,无法继续执行代码,这个问题可能是由于该文... 遇到qt5cored.dll文件错误时,可能会导致基于 Qt 开发的应用程序无法正常运行或启动。这种错

电脑提示xlstat4.dll丢失怎么修复? xlstat4.dll文件丢失处理办法

《电脑提示xlstat4.dll丢失怎么修复?xlstat4.dll文件丢失处理办法》长时间使用电脑,大家多少都会遇到类似dll文件丢失的情况,不过,解决这一问题其实并不复杂,下面我们就来看看xls... 在Windows操作系统中,xlstat4.dll是一个重要的动态链接库文件,通常用于支持各种应用程序

Mac备忘录怎么导出/备份和云同步? Mac备忘录使用技巧

《Mac备忘录怎么导出/备份和云同步?Mac备忘录使用技巧》备忘录作为iOS里简单而又不可或缺的一个系统应用,上手容易,可以满足我们日常生活中各种记录的需求,今天我们就来看看Mac备忘录的导出、... 「备忘录」是 MAC 上的一款常用应用,它可以帮助我们捕捉灵感、记录待办事项或保存重要信息。为了便于在不同

springboot+vue项目怎么解决跨域问题详解

《springboot+vue项目怎么解决跨域问题详解》:本文主要介绍springboot+vue项目怎么解决跨域问题的相关资料,包括前端代理、后端全局配置CORS、注解配置和Nginx反向代理,... 目录1. 前端代理(开发环境推荐)2. 后端全局配置 CORS(生产环境推荐)3. 后端注解配置(按接口

ubuntu如何部署Dify以及安装Docker? Dify安装部署指南

《ubuntu如何部署Dify以及安装Docker?Dify安装部署指南》Dify是一个开源的大模型应用开发平台,允许用户快速构建和部署基于大语言模型的应用,ubuntu如何部署Dify呢?详细请... Dify是个不错的开源LLM应用开发平台,提供从 Agent 构建到 AI workflow 编排、RA

Docker安装MySQL镜像的详细步骤(适合新手小白)

《Docker安装MySQL镜像的详细步骤(适合新手小白)》本文详细介绍了如何在Ubuntu环境下使用Docker安装MySQL5.7版本,包括从官网拉取镜像、配置MySQL容器、设置权限及内网部署,... 目录前言安装1.访问docker镜像仓库官网2.找到对应的版本,复制右侧的命令即可3.查看镜像4.启