Docker镜像技术
来源:互联网 发布:网站快速排名软件 编辑:程序博客网 时间:2024/06/03 04:30
介绍
Docker image是实现应用的分发载体,其依赖于很多底层的技术,包括联合文件系统,写时复制等等,还涉及到多种可以选择的存储驱动,下面这张图很好的概括了镜像以及容器的文件系统.
容器镜像的制作
本身容器镜像的制作过程中可优化的地方可以从以下几个方面考虑:
- 镜像的存储:镜像采用分层存储,不同镜像里面相同的层将只需要存储一份
- 镜像的分发:容器启动的时候,会首先将镜像下载到本地,需要从仓库中下载镜像到本地,所以期望镜像的大小能够尽量的小
- 镜像启动的容器的运行效率:镜像启动容器的时候,采用联合挂载,期望镜像的层数能够尽量的少
- Dockerfile的可读性:Dockerfile是需要人来维护的,所以可读性也很重要,Dockerfile中每个语句都对应的是镜像里面的层,所以可以通过将多个语句合并写在一起,但是这样必然会导致降低Dockerfile的易读性.
最佳实践
- 合理的合并Dockerfile中语句,减少镜像的分层
例如我们在制作镜像的时候,将相同功能的语句写在一起
RUN mkdir -p /var/www/cgi-bin/cinder \ && cp -a /usr/bin/cinder-wsgi /var/www/cgi-bin/cinder/cinder-wsgi \ && sed -i -r 's,^(Listen 80),#\1,' /etc/httpd/conf/httpd.conf \ && sed -i -r 's,^(Listen 443),#\1,' /etc/httpd/conf.d/ssl.conf
- 执行yum/dnf/apt等安装软件包的时候,需要清理一下不需要的内容
FROM centos:6RUN \ yum -y install epel-release && \ yum -y install boost-devel bzip2 cmake\ yum clean all && rm -rf /var/lib/yum/yumdb && rm -rf /var/lib/yum/history
- 优化基础镜像,基础镜像是其他镜像的基础
* 基础镜像中应该包含了其他基于该基础镜像都需要使用的基础软件,并且镜像保持的足够的小,并且会完成如小工作:
* 配置RPM源,MAVEN源等需要涉及的安装工具的源,采用统一管理安装工具的源
* 配置时区以及系统的公共的配置文件 - 通过docker history imageID来查看镜像的层次关系,了解镜像的分层的情况,来优化镜像的制作过程.
- 对镜像进行安全扫描,部署自动化流程,能够自动的更新镜像并推送到仓库中,在仓库中通过tag的方式来管理镜像.
FAQ
- 常见的存储驱动的选择
主要有AUFS、OverlayFS,Device Mapper,前两种驱动都是基于文件,它的原理就是需要修改一个文件的时候把整个文件复制上去做修改, Device Mapper更偏底层一点,它是基于块设备的,它的好处在于当我想要修改一个文件的时候,我不会将整个文件拷上去,我会将文件修改的一些存储块拷上去做一些修改,当我有一些大文件想要修改的时候,Device Mapper会比AUFS、OverlayFS好很多。所以AUFS和OverlayFS就比较适合传统的WEB应用,它的文件操作不会很多,但是它可能对我们的应用启动速度会有一些要求,但是对于文件修改的一些效率我不是很关心,那可以使用基于文件的驱动,当我们是一些计算密集型的应用时候,我们就可以选择Device Mapper,虽然启动比较慢,但是它的运行效率相对表现要好一些。
History
2017/12/23 init doc
Link
阅读全文
0 0
- Docker镜像技术
- Docker容器技术介绍(二) --- Docker镜像操作
- [Docker]Docker镜像
- 【容器技术】Docker中的镜像分层技术详解
- docker技术入门与实战-镜像、容器、仓库
- 【Docker】docker镜像原理
- 【Docker】Docker构建镜像
- Docker镜像
- 关于docker镜像
- Docker镜像制作
- Docker中的镜像
- docker 镜像
- docker镜像
- docker镜像操作
- Docker镜像
- Docker镜像加速器
- docker 镜像管理
- docker 创建镜像
- Sublime Text 3 import Anaconda 无法正常补全模块名解决办法
- ssm三大框架整合
- web安全整理
- 使用Material Design主题
- C#文件路径操作总结 转载自 51cto 周金桥
- Docker镜像技术
- centos7 安装matplotlib
- Jenkins个人搭建
- Linux内核笔记 -- RCU机制
- python-快速使用urllib爬取网页(1)
- android微信分享之视频、URL地址、表情分享
- 我的第一个可调参数深度学习模型
- 使用nutz进行复杂的数据库操作
- web学习笔记25-Hibernate基本配置使用