欢迎光临
我们一直在努力

177. docker镜像的分层与优化

本站教程收集整理的这篇文章主要介绍了177. docker镜像的分层与优化,本站教程本站觉得挺不错的,现在分享给大家,也给大家做个参考。

1. docker的镜像分层

相当于kvm 链接克隆,写时复制的特性
docker里的镜像绝大部分都是在别的镜像的基础上去进行创建的,也就是使用镜像的分层结构。

2. 便宜美国vps 实验

比如说使用dockerfile去创建一个最简单的Hello镜像。创建好对应的dockerfile之后去进行创建:

@H_262_20@FROM alpine:latest
MAINTAINER sbb
CMD echo "Hello world"

执行了上面的命令我们可以看到存在着两个镜像,其中Hello_world是我刚刚创建好的镜像。

@H_262_20@$ docker imgaes
alpine
Hello_world

3. docker分层

那么为什么会有两个镜像呢?这是由于docker的镜像分层结构所导致的,如下图所示。

一个docker镜像由多个可读的镜像层组成,然后运行的容器会在这个docker的镜像上面多加一层可写的容器层,任何的对文件的更改都只存在此容器层。因此任何对容器的操作均不会影响到镜像。

4. 如何实现

至于容器如何获取镜像层文件而又不影响到是镜像层的呢?docker是这样实现的?
如果需要获取某个文件,那么容器曾会从上到下去下一层的镜像层去获取文件,如果该层文件不存在,那么就会去下一镜像层去寻找,直到最后一层。
对于用户而言,用户面向的是一个叠加后的文件系统。

而任何对于文件的操作都会记录在容器层,例如说修改文件,容器层会把在镜像层找到的文件拷贝到容器层然后进行修改,删除文件则会在容器层内记录删除文件的记录。

5. 综述

镜像分层的好处

1. 基本上每个软件都是基于某个镜像去运行的,因此一旦某个底层环境出了问题,就不需要去修改全部基于该镜像的软件的镜像,只需要修改底层环境的镜像。
2. 这个好处也是最大好处,就是可以共享资源,其他相同环境的软件镜像都共同去享用同一个环境镜像,而不需要每个软件镜像要去创建一个底层环境。
3. 可以复用,节省磁盘空间,相同的内容只需加载一份到内存。 修改dockerfile之后,再次构建速度快

6. dockerfile优化

@H_262_20@dockerfile 优化:

1:尽可能选择体积小linux发行版,alpine

2:尽可能合并RUN指令,清理无用的文件(yum缓存,源码包)

3:修改dockerfile时,把需要变更的内容尽可能放在dockerfile结尾

4:使用.dockerignore,减少不必要的文件ADD . /html

例如:
[root@docker01 Nginx]# cat dockerfile
FROM centos:6.9
RUN rm -rf /etc/yum.repos.d/* && \
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo && \
curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo && \
yum install Nginx -y
workdir /usr/share/Nginx/html
ADD xiaoniao.tar.gz .
ADD init.sh /init.sh
EXPOSE 80
VOLUME /usr/share/Nginx/html
CMD ["/bin/bash","/init.sh"]

  • 点赞

  • 收藏

  • 分享

  • @H_618_106@

    • 文章举报

寻花之梦~~

发布了179 篇原创文章 · 获赞 72 · 访问量 1万+

私信

关注

本站总结

以上是本站教程为你收集整理的177. docker镜像的分层与优化全部内容,希望文章能够帮你解决177. docker镜像的分层与优化所遇到的程序开发问题。

如果觉得本站教程网站内容还不错,欢迎将本站教程推荐给好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。

赞(0)
【声明】:本博客不参与任何交易,也非中介,仅记录个人感兴趣的主机测评结果和优惠活动,内容均不作直接、间接、法定、约定的保证。访问本博客请务必遵守有关互联网的相关法律、规定与规则。一旦您访问本博客,即表示您已经知晓并接受了此声明通告。