美文网首页DevOps
Docker镜像的精简方法

Docker镜像的精简方法

作者: 猴子精h | 来源:发表于2017-06-28 00:19 被阅读308次

镜像化带来的容器重启问题。因为镜像是一体的,哪怕只是有一点点修改,镜像的发布都必须销毁之前的容器,然后按新镜像创建新的容器;精简镜像大小的好处不言而喻,既节省了存储空间,又能节省带宽,加快传输。

Docker的镜像采用分层的结构,最下面的base镜像提供最基本的运行环境,然后像搭积木一样一层一层往上加,所以精简镜像最有效的办法就是:1. 尽量选择最小的base image; 2. 减少镜像的层数;

20161027203243.jpg

选择最精简的Base Image

  • 通常情况下,常用的Linux镜像一般有ubuntu, centos, debian, 其中debian更轻量,而且够用,对比如下:

    REPOSITORY          TAG           IMAGE ID          VIRTUAL SIZE
    gliderlabs/alpine   latest        9cfff538e583      4.803 MB
    debian              latest        19134a8202e7      123.1 MB
    ubuntu              latest        104bec311bcd      129 MB
    centos              latest        67591570dd29      191.8 MB
    
  • 当选择编译的语言能生成静态原生 ELF 文件,比如C/C++,比如 Go,就可以选择下列超小的image, 或者直接是个空镜像scratch

    • scratch: 一个空镜像,只能用于构建镜像,通过 FROM scratch;

    • busybox: 包含了常用的 UNIX 工具, 非常方便构建小镜像;

    • docker-alpine: A super small Docker image based on Alpine Linux. The image is only 5 MB and has access to a package repository that is much more complete than other BusyBox based images.

    REPOSITORY          TAG           IMAGE ID          VIRTUAL SIZE
    gliderlabs/alpine   latest        9cfff538e583      4.803 MB
    busybox             latest        c75bebcdd211      1.11 MB
    

    例如,基于一个空的基础镜像完成一个redis的镜像:

    1. 使用ldd命令查看redis-server共享的依赖库
    ldd  redis-3.0.0/src/redis-server
    
    linux-vdso.so.1 =>  (0x00007fffde365****00)
    libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f307d5aa000)
    libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f307d38c000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f307cfc6000)
    /lib64/ld-linux-x86-64.so.2 (0x00007f307d8b9000)
    
    1. 打包所有的.so动态库
     cd /
    tar zcvf rootfs.tar.gz \
     usr/local/bin/redis-server \
     lib/x86_64-linux-gnu/libm.so.6 \
     lib/x86_64-linux-gnu/libpthread.so.0 \
     lib/x86_64-linux-gnu/libc.so.6 \
     lib64/ld-linux-x86-64.so.2
    
    1. dockerfile构建镜像
    FROM scratch 
    ADD  rootfs.tar.gz  / 
    COPY redis.conf     /etc/redis/redis.conf 
    EXPOSE 6379
    CMD ["redis-server"]
    

    查看大小,才7.73M

    redis             latest        c76bebcdd211      7.73 MB
    

使用&&串联Dockerfile

记住:在 Dockerfile 中, 每一条指令都会创建一个镜像层,继而会增加整体镜像的大小。

  • 用&&串联指令(一般是RUN指令)
  • 安装完软件记得clean
FROM debian:wheezy
RUN apt-get update && apt-get install -y wget && rm -rf /var/lib/apt/lists/*

相关文章

  • Docker精简镜像的方法介绍

    精简Docker镜像的五种通用方法 精简Docker镜像的好处很多,不仅可以节省存储空间和带宽,还能减少安全隐患。...

  • Docker镜像的精简方法

    镜像化带来的容器重启问题。因为镜像是一体的,哪怕只是有一点点修改,镜像的发布都必须销毁之前的容器,然后按新镜像创建...

  • 精简你的docker镜像

    精简你的 docker 镜像 Intro 现在 docker 的使用越来越普遍,今天来谈一下如何精简你的 dock...

  • 小而美的Docker镜像alpine

    今天笔者pull个ubuntu系统镜像来测试,拉下去查看镜像才72.9MB!惊叹Docker镜像可以做到这么精简。...

  • 制作docker镜像-精简

    容器是镜像的一个运行实例,不同的是它带有额外的可写层 Dockerfile run.shcontainer启动时需...

  • docker 小记

    docker输出镜像的两种方法: docker导入镜像的方法: 不要使用 export /import参数 其他常...

  • Docker镜像管理

    镜像是什么 简单说,Docker镜像是一个不包含Linux内核而又精简的Linux操作系统 镜像从哪里来 Dock...

  • docker换源 更换为国内镜像

    docker更换为国内镜像 方法1、如何使用官方镜像 Docker 中国官方镜像加速可通过 registry.do...

  • Docker 安装 Tomcat

    方法一、docker pull tomcat 查找Docker Hub上的tomcat镜像 这里我们拉取官方的镜像...

  • 《Docker 源码分析(9)Docker 镜像介绍》学习笔记

    本文仅仅是对《Docker 源码分析》 内容中自己需要部分的精简加上一些自己的理解 Docker镜像介绍Image...

网友评论

    本文标题:Docker镜像的精简方法

    本文链接:https://www.haomeiwen.com/subject/qhuycxtx.html