Docker容器技术
一、Docker 容器的基础知识
1.1.1 Docker 容器介绍
- 什么是容器?
容器是一种基础工具。泛指任何可以用于容纳其它物品的工具、可以部分或完全封闭,被用于容纳、存放、运输物品。物体可以被存放在容器中、而容器则可以保护容器内部的物品(存东西和隔离)。
容器的类型:锅 ,碗 ,瓶,罐,桶等。
- 主机虚拟化与容器的区别
虚拟化就是通过模拟计算机的硬件,来实现在同一台计算机上同时运行不同的操作系统的技术常用的vmwore、openstack、kvm都是使用的虚拟化技术。
容器就是在隔离环境运行的一个进程,如果进程停止,容器就会销毁。隔离的环境拥有自己的系统文件,IP地址,主机名等。
他们的区别:
虚拟话:需要硬件支持,需要模拟硬件,可以运行不同的操作系统,启动需要走开机启动流程(分钟级)。
容器技术:
共用宿主机内核,第一个进程直接启动服务(nginx,mysql等),开机秒级,轻量,损耗少。
- NameSpace命名空间(资源隔离)
名称 | 说明 | 作用 |
---|---|---|
PID | 进程隔离 | 进程编号隔离 |
NET | 网络管理接口 | 网络空间隔离 |
IPC | 管理跨进程通信的访问 | 进程间通信隔离 |
Mount | 挂载点管理 | 文件系统隔离 |
UTS | 主机名域名 | 隔离内核和版本标识 |
USER | 用户和用户组 | 用户空间隔离 |
- LXC到Docker的历史
LXC,将原来需要手工编码实现的容器技术,进行了封装。实现了,更加方便、快速的容器创建及管理的技术。通过固有“模板”,安装并启动容器。将远程的程序包下载到本地,安装并创建好我们需要的容器。
确实,LXC已经很大程度上降低了容器管理的难度,但是依然使用一些弊端。有些时候可能需要自定制模板,以及使用LXC中自带的模板,以及大规模创建及复制依然比较麻烦。所以,很难大规模的应用。所以,出现了Docker技术。Docker是在LXC基础上,使用GoLang二次开发的封装版。
- Docker的发展历史
Docker 公司位于旧金山,由法裔美籍开发者和企业家 Solumon Hykes 和几个年轻的小伙在2010年创立的,有意思的是,Docker 公司起初是一家名为 dotCloud 的平台即服务(Platform-as-a-Service, PaaS)提供商。
底层技术上,dotCloud 平台利用了 Linux 容器技术。为了方便创建和管理这些容器,dotCloud 开发了一套内部工具,之后被命名为“Docker”。Docker就是这样诞生的!
2013年,dotCloud 的 PaaS 业务并不景气,公司需要寻求新的突破。于是他们聘请了 Ben Golub 作为新的 CEO,将公司重命名为“Docker”,放弃dotCloud PaaS 平台,怀揣着“将 Docker 和容器技术推向全世界”的使命,
开启了一段新的征程。
如今 Docker 公司被普遍认为是一家创新型科技公司,据说其市场价值约为 10 亿美元。Docker 公司已经通过多轮融资,吸纳了来自硅谷的几家风投公司的累计超过 2.4 亿美元的投资。
几乎所有的融资都发生在公司更名为“Docker”之后。
- 什么Docker
1、Docker 是基于容器技术的轻量级虚拟化解决方案。
2、Docker是容器引擎,把Linux的cgroup,namespace等容器技术进行封装抽象为用户提供了创建和管理容器的便捷界面(包括命令和API Docker 利用 Linux 核心中的资源分离机制,例如 cgroups,以及 Linux namespace,来创建独立的容器。)。
3、Docker 是一个开源项目,诞生于2013年初,基于Google公司推出的GO语言实现的。
4、微软,红帽Linux,IBM,Oracle等主流的IT厂商已经在自己的产品里增加了对Docker容器技术的支持
5、相比其他早早期的容器技术,Docker引进了一套容器管理的生态系统,包括分层的镜像模型,容器注册库,友好的REST API.
- 容器技术和虚拟化技术的对比
资源 | 容器技术 | 虚拟化技术 |
---|---|---|
占用磁盘 | 小,甚至几十KB(镜像层的情况) | 非常大,上GB |
启动速度 | 快,秒级别 | 慢,需要几分钟 |
运行心态 | 自己运行在宿主机的内核上,不同容器共享一个Linux内核 | 运行在Hypervisior上 |
并发性 | 一台属主机可以启动成千上百个容器 | 最多几十个虚拟机 |
性能 | 接近宿主机本地进程 | 逊于宿主机 |
资源利用率 | 高 | 低 |