docker的组成及优缺点(2)

2137人浏览 / 0人评论

一、docker组成

Docker客户端(client):客户端使用docker命令或则其他工具调用docker API。

docker服务器端(server): docker守护进程,运行docker容器。

docker镜像(images):镜像可以理解为创建实例使用的模板。

docker容器(container):容器是从镜像生成对外提供服务的一个或一组服务。

docker仓库(registry):保存镜像的仓库,类似于git或者svn这样的版本控制系统。

官网仓库:http://hub.docker.com

二、docker对比虚拟机

资源利用率更高,一台物理机可以运行数百个容器,但是一般只能运行数十个虚拟机。

开销更小:不需要启动单独的虚拟机占用硬件资源。

启动速度更快:可以在数秒内完成启动。

三、docker的优势

快速部署:短时间内可以部署成百上千个应用,更快速交付到线上。

高效虚拟化:不需要额外的hypervisor支持,直接基于linux 实现应用虚拟化,相比虚拟机大幅提高性能和效率。

节省开支:提高服务器利用率,降低IT 支出

简化配置将运行环境打包保存至容器,使用时直接启动即可。

快速迁移和扩展:可夸平台运行在物理机、虚拟机、公有云等环境,良好的兼容性可以方便将应用从A平台迁移到B平台

四、docker缺点

隔离性应用之间的隔离不如虚拟机。

安全性目前docker server无法判断容器是由那个用户启动的,删除的时候不会做权限审核,即A用户可以删除B用户启动的容器。

稳定行及功能性:目前docker版本还在快速迭代更新,很多新功能依赖于较高的linux 内核,因此会存在版本兼容性问题。

五、容器定义工具

容器定义工具允许用户定义容器的属性和内容,以方便容器能够被保存、共享和重建。

docker image: 是docker容器的模板,runtime依据docker image创建容器。

dockerfile:包含N的命令的文本文件,通过dockerfile创建出docker image。

ACL(app container image):与docker image类似,是coreos开发的rkt容器的镜像格式。

registry: 统一保存共享镜像的地方,叫做镜像仓库。

image registry: docker官网的公共仓库,已经保存了大量的常用镜像,可以方便大家直接使用。

harbor:vmware提供的自带web的镜像仓库,目前很多公司使用。

 

 

编排工具:

多个容器在多个主机运行的时候,单独管理每个容器是相当负载而且很容易出错,而且也无法实现某一台主机宕机后容器自动迁移到其他主机从而实现高可用的目的,无法实现动态伸缩的功能,因此需要有一工具可以实现统一管理、动态伸缩、故障自愈批量执行等功能这就是容器编排引擎

容器编排通常包括容器管理、调度、集群定义服务发现等功能。

Docker swarm:docker 开发的容器编排引擎

Kubernetes:google 领导开发的容器编排引擎,其同时支持docker和CoreOS。

Mesos通用集群组员调度平台mesosmarathon一起提供容器编排引擎功能

  

六、容器的依赖技术

容器网络

docker自带的网络docker network仅支持管理单机上的容器网络,多主机运行的时候需要使用第三方开源网络,例如calico、flannel

 

服务发现:

容器动态扩容特性决定了容器IP也会随之变化因此需要有一种机制开源自动识别用户请求动态转发到新创建的容器上,kubernetes自带服务发现功能,需要结合kube-dns服务解析内部域名。

 

容器监控:

可以通过原生命令docker ps/top/stats 查看容器运行状态,另外也可以使heapster/ Prometheus等第三方监控工具监控容器的运行状态。

 

数据管理:

容器的动态迁移会导致在不通的Host之间迁移,因此如何保证与容器相关的数据也能随之迁移或随时访问,可以使用逻辑卷/存储挂载等方式解决

 

日志收集

docker 原生的日志查看工具docker logs,但是容器内部的日志需要通过ELK等专门的日志收集分析和展示工具进行处理

 

全部评论