Docker是什么
Docker主要是用在以应用为中心的PaaS平台,或者说,是以微服务为架构的平台。
什么是微服务架构呢?
简单来说,就是把一个有着各种功能的应用,根据不同的功能,拆分成多个不同的独立应用,来达到降低耦合的目的。例如,把认证功能,用户界面,后台数据等三大功能独立分成三个单独的应用,彼此之间通过各自的API进行远程调用。而在以前,则是把这三大功能都集成在同一个大应用里面。
传统VM和Docker容器的区别
如上图所示,传统VM,需要在宿主机OS的基础上,运行Hypervisor来模拟一套硬件,再通过运行各自的GuestOS,来达到隔离和资源调度的目的。而Docker仅仅需要运行一个轻量级的Docker Engine即可。经过测试,传统VM比起Docker有着5%-20%的性能差距。但比Docker容器有着更好的隔离性、资源限制和安全性。
上图为传统VM和Docker容器的对比
继续来看Docker容器和LXC容器的对比,一般来说,Docker容器比LXC容器多了AUFS文件系统。
如上面两个图所示,因为Docker容器默认使用的就是AUFS文件系统,这个系统可以通过在最底下的那一层构建基础镜像,然后在这个基础层的上面安装各种库,最后再在上面安装各种应用的方式,来构建各种不同的镜像。镜像的每一层都是只读的。每次运行一个实例,就在这个只读镜像的基础上,创建一个可读写的层,来存放实例的数据。
不同实例之间,可以共享同一个镜像,他们之间的区别仅仅是最上面的那一层可读写层。同时,Docker还可以把实例的可读写层连同只读镜像一起,创建一个新的镜像。这个镜像只有最顶上的一层是新的数据,其它层仍然与旧镜像共用,达到节省存储空间的目的。这功能类似于git的版本管理。
Docker还支持使用Dockerfile,一个类似自动化脚本的文件,来自动构建Docker镜像。官方提供一个Docker Hub(远程仓库),支持用户上传自己的镜像到这个仓库上,与全世界的人一起分享。
Docker容器,一般是单机部署。但也有很多工具可以用来部署集群,用来供云使用。例如Docker官方的Swarm,google的Kubernetes,第三方的CoreOS,Apache的Mesos+Marathon。这些工具都大大方便了Docker集群的部署。
上图为Docker 的集群管理工具
Docker实践中的问题以及解决办法
1. 首先是Docker 运行在物理机上还是虚拟机上?
一般来说,如果需要高性能,例如HPC,则使用容器虚拟化,并运行在物理机上。如果是需要部署一系列的服务,则选择CaaS,并运行在虚拟机上。
2. 是直接使用Docker,还是使用支持Docker的云平台?
支持Docker的云平台,可以在创建时对实例进行调度,也可以在运行时进行调度,更大限度且合理地利用系统资源。同时不但支持Docker容器,还支持CaaS服务。而且还能进行自动的容灾迁移和弹性伸缩。
3. Docker镜像该如何管理?
因为Docker官方提供的镜像仓库是在国外,国内没有节点,导致国内访问的速度比较慢。同时因为国外的网站容易被墙,导致无法访问。所以一般来说,特别是对稳定性有很高要求的企业用户来说,还是建议使用私有的镜像仓库。品高云内置私有的Docker镜像仓库,解决企业内部使用Docker 镜像的问题。同时,品高云还支持镜像统一管理,实例备份还原,实例存为镜像等镜像功能。
4. Docker网络该如何管理?
Docker基于namespace隔离,默认只支持Bridge,Host,None这三种模式。这对于企业应用来说,是完全不够的。品高云让Docker支持云平台VPC网络架构,网络灵活多样,更符合企业的习惯。同时还可以支持QOS限速和多租户隔离。而且,品高云还可以支持SDN。当容器数量达到万级别的时候,只有SDN才能很好地支持如此多的容器,网络才不会是瓶颈。
5. Docker网络安全性如何?
Docker并未提供任何网络安全性解决方案。
品高云提供的Docker实例具备以下网络安全性:
o可应用安全组功能;
o可应用子网ACL规则;
o多租户VLAN隔离。
6. Docker对存储的支持如何?
Docker对存储的支持比较有限,仅支持创建时节点文件系统目录映射。这对企业来说,是远远不够的。品高云则提供存储卷功能,品高云启动的Docker实例,可以动态添加/卸载存储卷,同时也实时备份存储卷。
Docker的使用场景有哪些?
一般是以下三个:
高性能要求 ,例如HPC;
GPU 、机器学习 、人工智能;
应用管理、部署、测试、持续集成。