Docker--dockerfile2(镜像的优化)

镜像的优化

原则:

  • 选择最经简的基础镜像
  • 减少镜像的层数
  • 清理镜像构建的中间产物
  • 注意优化网络请求
  • 尽量去构建缓存
  • 使用多阶段构建镜像
  • 前提:保证镜像存在于本地
[root@server3 docker]# docker load -i rhel7.tar 
[root@server3 docker]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
ubuntu              latest              3556258649b2        2 weeks ago         64.2 MB
busybox             latest              db8ee88ad75f        3 weeks ago         1.22 MB
game2048            latest              19299002fdbe        2 years ago         55.5 MB
rhel7               latest              0a3eb3fde7fd        5 years ago         140 MB
  • 构建一个nginx镜像,查看大小为295MB
[root@server3 docker]# docker build -t nginx:v1 .
[root@server3 docker]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
nginx               v1                  6baf2165c143        30 seconds ago      295 MB
ubuntu              latest              3556258649b2        2 weeks ago         64.2 MB
busybox             latest              db8ee88ad75f        3 weeks ago         1.22 MB
game2048            latest              19299002fdbe        2 years ago         55.5 MB
rhel7               latest              0a3eb3fde7fd        5 years ago         140 MB

实例:部署Nginx

  • 第一次搭建
FROM rhel7
EXPOSE 80
MAINTAINER dd@westos.org
COPY dvd.repo /etc/yum.repos.d/
RUN rpmdb --rebuilddb
RUN yum install -y gcc make pcre-devel zlib-devel
ADD nginx-1.15.9.tar.gz /mnt
WORKDIR /mnt/nginx-1.15.9
RUN ./configure --prefix=/usr/local/nginx
RUN make
RUN make install

启动镜像

# 通过exec的方式
# nginx的启动方式
CMD ["/usr/local/nginx/sbin/nginx","-g","daemon off;"]
  • 给镜像"瘦身":减少中间产物
[root@server3 docker]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
nginx               v2                  d21df066fe46        5 seconds ago       272 MB
nginx               v1                  6baf2165c143        5 minutes ago       295 MB
ubuntu              latest              3556258649b2        2 weeks ago         64.2 MB
busybox             latest              db8ee88ad75f        3 weeks ago         1.22 MB
game2048            latest              19299002fdbe        2 years ago         55.5 MB
rhel7               latest              0a3eb3fde7fd        5 years ago         140 MB
[root@server3 docker]# cat dockerfile 
FROM rhel7
EXPOSE 80
MAINTAINER dd@westos.org
COPY dvd.repo /etc/yum.repos.d/
RUN rpmdb --rebuilddb
RUN yum install -y gcc make pcre-devel zlib-devel && yum clean all #清理yum缓存
ADD nginx-1.15.9.tar.gz /mnt
WORKDIR /mnt/nginx-1.15.9
RUN ./configure --prefix=/usr/local/nginx
RUN make
RUN make install
RUN rm -rf /mnt/nginx-1.15.9 #删除原始编译路径
CMD ["/usr/local/nginx/sbin/nginx","-g","daemon off;"]
  • 注意:一但改动 缓存就不能用了
  • 给镜像"瘦身":减少镜像层数 #合并多个RUN
  • 注意:修改了指令 哪怕是一个空格 缓存就不能用了 使用缓存可以加快镜像构建速度
[root@server3 docker]# docker build -t nginx:v3 .
[root@server3 docker]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
nginx               v3                  49349f668909        33 seconds ago      253 MB
nginx               v2                  d21df066fe46        5 minutes ago       272 MB
nginx               v1                  6baf2165c143        11 minutes ago      295 MB
ubuntu              latest              3556258649b2        2 weeks ago         64.2 MB
busybox             latest              db8ee88ad75f        3 weeks ago         1.22 MB
game2048            latest              19299002fdbe        2 years ago         55.5 MB
rhel7               latest              0a3eb3fde7fd        5 years ago         140 MB
[root@server3 docker]# cat dockerfile 
FROM rhel7
EXPOSE 80
MAINTAINER dd@westos.org
COPY dvd.repo /etc/yum.repos.d/
ADD nginx-1.15.9.tar.gz /mnt
WORKDIR /mnt/nginx-1.15.9
RUN rpmdb --rebuilddb && yum install -y gcc make pcre-devel zlib-devel && yum clean all && ./configure --prefix=/usr/local/nginx && make && make install && rm -rf /mnt/nginx-1.15.9
CMD ["/usr/local/nginx/sbin/nginx","-g","daemon off;"]
  • 层数对比
[root@server3 docker]# docker history nginx:v1
IMAGE               CREATED             CREATED BY                                      SIZE                COMMENT
6baf2165c143        11 minutes ago      /bin/sh -c #(nop)  CMD ["/usr/local/nginx/...   0 B                 
a0c55fb15186        11 minutes ago      /bin/sh -c make install                         3.86 MB             
c2818114b626        11 minutes ago      /bin/sh -c make                                 12.3 MB             
42cfafda467f        12 minutes ago      /bin/sh -c ./configure --prefix=/usr/local...   71.6 kB             
b53295c86125        12 minutes ago      /bin/sh -c #(nop) WORKDIR /mnt/nginx-1.15.9     0 B                 
3d39ff802d4d        12 minutes ago      /bin/sh -c #(nop) ADD file:a2cce44ecbad0bd...   6.2 MB              
e45257d6ece4        12 minutes ago      /bin/sh -c yum install -y gcc make pcre-de...   126 MB              
3a812a20583c        12 minutes ago      /bin/sh -c rpmdb --rebuilddb                    6.64 MB             
ca37225041bb        14 minutes ago      /bin/sh -c #(nop) COPY file:45a94bb87479f6...   81 B                
8c63445a8161        14 minutes ago      /bin/sh -c #(nop)  MAINTAINER dd@westos.org     0 B                 
0544c1ca4b61        14 minutes ago      /bin/sh -c #(nop)  EXPOSE 80/tcp                0 B                 
0a3eb3fde7fd        5 years ago 
[root@server3 docker]# docker history nginx:v2
IMAGE               CREATED             CREATED BY                                      SIZE                COMMENT
d21df066fe46        6 minutes ago       /bin/sh -c #(nop)  CMD ["/usr/local/nginx/...   0 B                 
84cef4bc300b        6 minutes ago       /bin/sh -c rm -rf /mnt/nginx-1.15.9             0 B                 
9fd5173e4d04        6 minutes ago       /bin/sh -c make install                         3.86 MB             
d8a1f114e45e        6 minutes ago       /bin/sh -c make                                 12.3 MB             
64d1ab9f3fef        6 minutes ago       /bin/sh -c ./configure --prefix=/usr/local...   71.6 kB             
b6380cfd1f52        6 minutes ago       /bin/sh -c #(nop) WORKDIR /mnt/nginx-1.15.9     0 B                 
b1e894d7b421        6 minutes ago       /bin/sh -c #(nop) ADD file:a2cce44ecbad0bd...   6.2 MB              
5a77bfb745f5        6 minutes ago       /bin/sh -c yum install -y gcc make pcre-de...   102 MB              
3a812a20583c        12 minutes ago      /bin/sh -c rpmdb --rebuilddb                    6.64 MB             
ca37225041bb        14 minutes ago      /bin/sh -c #(nop) COPY file:45a94bb87479f6...   81 B                
8c63445a8161        14 minutes ago      /bin/sh -c #(nop)  MAINTAINER dd@westos.org     0 B                 
0544c1ca4b61        14 minutes ago      /bin/sh -c #(nop)  EXPOSE 80/tcp                0 B                 
0a3eb3fde7fd        5 years ago  
[root@server3 docker]# docker history nginx:v3
IMAGE               CREATED              CREATED BY                                      SIZE                COMMENT
49349f668909        About a minute ago   /bin/sh -c #(nop)  CMD ["/usr/local/nginx/...   0 B                 
a181a5f0e37e        About a minute ago   /bin/sh -c rpmdb --rebuilddb && yum instal...   106 MB              
89980b82160c        About a minute ago   /bin/sh -c #(nop) WORKDIR /mnt/nginx-1.15.9     0 B                 
2e72df71ca13        About a minute ago   /bin/sh -c #(nop) ADD file:a2cce44ecbad0bd...   6.2 MB              
ca37225041bb        14 minutes ago       /bin/sh -c #(nop) COPY file:45a94bb87479f6...   81 B                
8c63445a8161        14 minutes ago       /bin/sh -c #(nop)  MAINTAINER dd@westos.org     0 B                 
0544c1ca4b61        14 minutes ago       /bin/sh -c #(nop)  EXPOSE 80/tcp                0 B                 
0a3eb3fde7fd        5 years ago 

多阶段构建镜像

比较优秀的方式(杀手锏)细看dockerfile 我们其实只需要编译好的nginx的二进制文件

[root@server3 docker]# docker build -t nginx:v4 . #很快:安装包完全使用缓存
[root@server3 docker]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
nginx               v4                  b218a266197d        5 minutes ago       144MB
nginx               v3                  49349f668909        About an hour ago   253MB
nginx               v2                  d21df066fe46        About an hour ago   272MB
nginx               v1                  6baf2165c143        2 hours ago         295MB
ubuntu              latest              3556258649b2        2 weeks ago         64.2MB
busybox             latest              db8ee88ad75f        3 weeks ago         1.22MB
game2048            latest              19299002fdbe        2 years ago         55.5MB
rhel7               latest              0a3eb3fde7fd        5 years ago         140MB
[root@server3 docker]# cat dockerfile 
FROM rhel7:latest as build
EXPOSE 80
MAINTAINER dd@westos.org
COPY dvd.repo /etc/yum.repos.d/
ADD nginx-1.15.9.tar.gz /mnt
WORKDIR /mnt/nginx-1.15.9
RUN rpmdb --rebuilddb && yum install -y gcc make pcre-devel zlib-devel && yum clean all && ./configure --prefix=/usr/local/nginx && make && make install && rm -rf /mnt/nginx-1.15.9
  • 以上只是一个桥梁
FROM rhel7:latest #基于rhel7的基础镜像
EXPOSE 80
MAINTAINER dd@westos.org
VOLUME ["/usr/local/nginx/html"]
COPY --from=build /usr/local/nginx /usr/local/nginx #从上一层的构建中拷贝
CMD ["/usr/local/nginx/sbin/nginx","-g","daemon off;"]

那我们有没有办法去减小基础镜像,谷歌为我们提供了非常精简的镜像
https://github.com/search?utf8=%E2%9C%93&q=distroless&type=

容器的分类

按用途容器大致可分为两类:服务类容器和工具类容器

  • 服务类容器以daemon的形式运行,对外提供服务,比如web
    server,数据库等,通过-d以后台方式启动这类容器是非常合适的,如果要排查问题,可以通过exec -it进入容器
  • 工具类容器通常能给我们提供一个临时的工作环境,通常以run -it方式运行
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值