docker初识
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*
Virtual Machine VS Docker
*
Docker优势• 节省虚拟Guest OS需要的大量空间
– 硬盘空间以GB为单位,内存以MB位单位– Guest OS越多越体现Docker优势
• 性能接近原生系统• 轻量级,快速创建和启动
软件交付(创建/发布/运行)
*
• 软件运行环境
– 操作系统
– 开发调试工具
– 第三方软件或库
– 配置项
交付时常遇到不同机器间环境不一致性的坑,比如
版本/环境变量/库路径/编译选项......
环境一致性的解决方法
*
• 以前
– 创建阶段:文档+人肉手动,效率取决于开发队伍习惯
– 发布运行阶段:安装包或脚本
• 有了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
安全性
• 名字空间(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内核能力机制– 限制容器进程能力,白名单
*
参考
• 第一本Docker书
• Docker —— 从入门到实践
• Docker基础技术:Linux Namespace(上)
• What is Docker?
• containers-docker-virtual-machines-and-hpc
• performance-of-docker-vs-vms
• introduction-to-docker
*