docker初识

15
2015[email protected]

Upload: hubugui

Post on 09-Jan-2017

1.599 views

Category:

Software


1 download

TRANSCRIPT

• 起源dotCloud公司PAAS引擎

– http://github.com/docker/docker

• Linux Container Engine

– 容器间隔离,共享OS,资源配给

– 虚拟机(VMWare/Xen/KVM/VirtualBox)替代品

• 软件集装箱

– Docker Hub 托管常用软件镜像的集装箱

• 软件交付革新

Docker是什么

*

Docker原理

• 名字空间(Name Spaces)

– 容器内外进程之间不可见,独立目录

• 控制组(Control Groups)

– 资源访问限制,CPU/内存/硬盘

• 联合文件系统(Aufs/Device mapper/Btrfs/Vfs)

– 容器复用和版本管理

• 容器格式

– LXC/1.20V后支持 libcontainer*

UnionFS(联合文件系统)

*

Virtual Machine VS Docker

*

Docker优势• 节省虚拟Guest OS需要的大量空间

– 硬盘空间以GB为单位,内存以MB位单位– Guest OS越多越体现Docker优势

• 性能接近原生系统• 轻量级,快速创建和启动

软件集装箱

*

Docker Hub

*

• 类似GitHub,常用软件镜像的集装箱• 开源,可用在私有环境• https://hub.docker.com/

软件交付(创建/发布/运行)

*

• 软件运行环境

– 操作系统

– 开发调试工具

– 第三方软件或库

– 配置项

交付时常遇到不同机器间环境不一致性的坑,比如

版本/环境变量/库路径/编译选项......

环境一致性的解决方法

*

• 以前

– 创建阶段:文档+人肉手动,效率取决于开发队伍习惯

– 发布运行阶段:安装包或脚本

• 有了Docker

– 借助Docker Hub,打包整个运行环境,一次生成到处运行

– 不同的软件运行环境得到隔离,冲突减少

Docker Life Cycle

*

http://www.slideshare.net/winggundamth/introduction-to-docker-40139950

例子

*

• Web(python/mysql/webpy/redis)

– 开发、测试、运维,借助Docker Hub,快速部署

• Android ROM开发

– 庞大的交叉编译工具链,依赖库

– 创建标准镜像,开发者在不同机器均可使用,减少折腾

• 标准化项目环境

– Python/VIM/VLC/FFMPEG/LLVM/OpenStack/Hadoop/QT/Redis

Virtual Desktop

*

https://github.com/rogaha/docker-desktop

Docker不足

• 安全性

– 隔离程度不如虚拟机

• 平台

– 仅限于Linux

– 下代Windows Server原生支持

*

安全性

• 名字空间(Name Spaces)– 2.6.15 版本(2008 年)之后被引入,数年间可靠性在诸多大型系统中被实践验证

• 控制组(Control Groups)– 始于 2006 年,内核从 2.6.24 版本开始引入

• Docker守护进程拥有root权限– 采用本地UNIX Socket取代127.0.0.1

– SSL证书加强客户端和守护进程之间的安全机制

– 容器root映射到宿主机非root,未来重点在于允许守护进程工作在非root

• Linux内核能力机制– 限制容器进程能力,白名单

*