Docker容器虚拟化平台
1. Docker 的概念
-
Docker
,翻译过来就是码头工人 -
Docker
是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可抑制的容器中,然后发布到任何流行的Linux机器
上,也可以实现虚拟化。容易完全使用沙盒机制,互相之间不会存在任何接口。几乎没有性能开销,可以很容易的在机器和数据中心运行。最重要的是,他们不依赖于任何语言、框架或者包装系统。小知识: 沙盒也叫
沙箱
(sandbox
)。在计算机领域指一种虚拟技术,而且多用于计算机安全技术。安全软件可以让它在沙盒中运行,如果含有恶意行为,则禁止程序的进一步运行,而这不会对系统造成任何危害。 -
Docker
是dotCloud
公司开源的一个基于LXC的高级容器引擎,源码托管在Github
上,基于go
语言并且遵从Apache2.0
协议开源。GiHub 地址: https://github.com/moby/moby
小知识:
LXC
为Linux Container
的简写。Linux Container
容器是一种内核虚拟化技术,可以提供轻量级的虚拟化,以便隔离进程和资源,而且不需要提供指令解释机制以及全虚拟化的其他负载型。LXC
主要通过Kernel
的namespace
实现每个用户实例之间的项目隔离,通过cgroup
实现对资源的配额和调度。Docker 官网:https://www.docker.com
Docker 中文库: https://www.docker.org.cn/
Docker 文档:https://docs.docker.com/
Docker 仓库:https://hub.docker.com/
1.1 Docker 为什么会出现?
- 一款产品:开发-上线 两套环境! 应用环境,应用配置!
- 环境配置是十分的麻烦,每一个机器都要部署环境(集群Redis、ES、HaDoop…)! 费时费力。而且也不能跨平台
- 于是就想:发布一个项目(jar + (Redis MySQL JDK ES)),项目能不能带上环境安装打包
- 传统:开发jar,运维来做
- 现在:Docker 提出了解决方案! 开发打包部署上线,一套流程做完!
- 安卓流程:java -> apk -> 发布(应用商店) -> 张三下载apk -> 安装即可用
- docker流程:java-jar(环境) -> 打包项目带上环境(镜像) -> (Docker仓库:商店) -> 下载我们发布的镜像 -> 直接运行即可
- Docker 的思想就是来自于集装箱
- JRE - 多个应用(端口冲突) - 原来都是交叉的!
- 隔离:Docker核心思想! 打包装箱!每个箱子都是相互隔离的
- Docker 通过隔离机制,可以将服务器利用到极致!
- 本质:所有的技术都是因为出现了一些问题,我们需要去解决,才去学习
1.3 Docker 的作用
DevOps
(开发、运维)
- 应用更快速的交付和部署
- 传统:一堆帮助文档,安装程序
- Docker:打包镜像,发布测试,一键运行
- 更便捷的升级和扩缩容
- 使用 Docker 之后,我们部署应用就像搭积木一样
- 如:把项目打包成一个镜像,我们拓展了其中的一个服务器A,这时在服务器B上一键运行这个镜像,就直接完成了拓展,就不再需要一个个的去配置和升级。
- 更简单的系统运维
- 在容器化之后,我们的开发、测试环境都是高度一致的
- 更高效的计算资源利用
- Docker 是内核级别的虚拟化,可以在一个物理机上运行很多的容器实力!服务器的性能可以被压榨到极致
1.2 Docker 的历史
- 2010年,几个年轻人, 在美国成立了一家公司
dotcloud
- 做一些pass的云计算服务!LXC(Linux Container 容器)有关的容器技术!
- 他们将自己的技术(容器化技术)命名为
Docker
开源
:开放源代码- 2013年,Docker开源! 越来越多的人发现docker的有点!火了。Docker每个月都会更新一个版本!2014年4月9日,Docker1.0正式发布!
- Docker 为什么这么火?十分的
轻巧
! - 在容器技术出来之前,我们都是使用虚拟机技术
- 虚拟机:在windows 中安装一个VMware,通过这个软件我们可以虚拟化出来一台或者多电脑!
- 虚拟机也属于虚拟化技术,Docker容器技术,也是一种虚拟化技术!
vm : linux centos 原生镜像(一个电脑!) 隔离、需要开启多个虚拟机! 几个G 几分钟
docker: 隔离,镜像(最核心的环境 4m + jdk + mysql)十分的小巧,运行镜像就可以了!小巧! 几个M。秒级启动!
2. Docker 容器技术与虚拟机的区别
-
相同点:docker和容器技术和虚拟机技术,都是虚拟化技术
-
不同点:容器技术相比虚拟机技术少了虚拟机操作系统这一层,所以docker效率比虚拟机效率高。达到了秒级启动的地步。
-
Docker相较于VM的优点:
- 比VM小、快,Docker容器的尺寸减小相比于整个虚拟机大大简化了分布到云和分发时间的开销。Docker启动一个容器实例时间仅仅需要几秒钟。
- Docker是一个开放的平台,构建、发布和运行分布式应用程序。
- 开发人员不需要关系具体是哪个Linux操作系统
- Google、微软(azure)、亚马逊、IBM等都支持docker
- Docker支持Unix/Linux操作系统,也支持 Windows 和 Mac
-
Docker 局限性:
Docker 用于应用程序时是最有用的,但并不包含数据。日志、数据库等通常放在Docker容器外。一个容器的镜像通常都很小,不用和存储大量数据,存储可以通过外部挂载等方式使用,比如:NFS、ipsan、MFS等,或者docker命令,-v映射磁盘分区。
总之,docker只用于计算,存储交给别人。
3. Docker 架构图
Docker的工作流程:
- 启动docker
- 下载镜像到本地
- 启动Docker容器实例
Docker核心技术
1. Namespace : 实现Container的进程、网络、消息、文件系统和主机名的隔离。
2. Cgroup : 实现对资源的配额和调度。
注意: Cgroup的配额,可以指定实例使用的CPU个数,内存大小等。
4. Docker 的特性
- 文件系统隔离:每个进程容器运行在一个完全独立的根文件系统里。
- 资源隔离:系统资源,像CPU和内存等可以分配到不同的容器种,使用cgroup。
- 网络隔离:每个进程容器运行在自己的网络空间,虚拟接口的IP地址。
- 日志记录:Docker将收集到和记录的每个进程容器的标准流(stdout/stderr/stdin),用于实时检索或者批量检索
- 变更管理:容器文件系统的变更可以提交到新的镜像中,并可重复使用以创建更多的容器。无需使用模板或者手动配置。
- 交互式Shell:Docker可以分配一个虚拟终端并且关联到任何容器的标准输出上,例如运行一个一次性交互shell。