关于docker
开源项目
由dotCloud于2013年初发起
Go语言实现
github地址:https://github.com/docker/docker
目标
其目标是通过对应用组件的封装、分发、部署、运行等生命周期的管理,达到应用组件级别的“一次封装,到处运行”
在了解Docker之前我们需要先了解一下容器技术
容器技术
容器历史
容器技术 | 系统 | 时间 |
---|---|---|
chroot | Unix | 1982年 |
FreeBSD jail | FreeBSD | 2000年 |
Linux-VServer | GUN/Linux | 2001年 |
Solaris Containers | Sun Solaris | 2004年 |
OpenVZ | GUN/Linux | 2005年 |
虽然这些技术经过多年的演化已经十分成熟了,但是这些技术并没有被集成到主流的Linux内核中,使用起来都很不方便。
例如 OpenVC 技术就需要用户给系统打上特定的内核补丁才可以使用。
Linux容器技术(LXC)
基于Linux内核机制的资源隔离方案,可以有效的将由单个操作系统管理的资源划分到孤立的组中,在孤立的组之间平衡资源的使用。
最重要的是LXC被集成到了主流的Linux内核中,成为了Linux系统轻量级的容器技术的事实标准。
Linux容器技术(LXC)是Docker引擎的基础
容器VS虚拟机
与虚拟机相同的是,可以为这些容器设置计算资源限制,挂载存储,连接网络,而与虚拟机不同的是,这些应用运行时共用着一个Kernel。
1. Docker 容器很快,启动和停止都在秒级别,比虚拟机快很多
2. Docker 容器对系统资源需求少,一台主机上可以同时运行数千个容器
3. Docker 通过类似 Git 的操作来方便用户获取、分发、和更新应用,指令简单,学习成本低
4. Docker 通过 Dockerfile 配置文件来支持灵活的自动化创建和部署机制,更高效
总结如下:
特性 | 容器 | 虚拟机 |
---|---|---|
启动速度 | 秒级 | 分钟级 |
硬盘使用 | MB | GB |
性能 | 接近原生 | 弱于 |
系统支持量 | 单机支持上千个容器 | 一般几十个 |
隔离性 | 安全隔离 | 完全隔离 |
Docker和Linux容器
Docker提供了各种容器管理工具(分发、版本、移植等)让用户可以简单明了的使用Linux容器技术。
Docker 容器在操作系统的层面实现虚拟化,直接使用本地主机的操作系统,更轻量。
Docker 还为 Linux 容器技术提供更高效的版本控制机制。