一、概要
官网首页
Github首页
官方仓库
Docker 是一个开源的基于 LXC(Linux Container) 的高级应用容器引擎,基于 Go 语言并遵从Apache2.0协议开源。主要让开发者可以打包应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux服务器上或者windows的服务器上,也可以实现虚拟化,容器是完全使用沙箱机制,每一个运行的程序都是独立的,而且不会对现有的系统产生影响。
Docker 从 17.03 版本之后分为 CE(Community Edition: 社区版) 和 EE(Enterprise Edition: 企业版),我们平时开发使用社区版就可以了。
二、应用场景
1、作为云主机使用
相比虚拟机来说,容器使用的是一系列非常轻量级的虚拟化技术,使得其启动、部署、升级跟管理进程一样迅速,用起来灵活又感觉跟虚拟机一样没什么区别,所以有些人直接使用Docker的Ubuntu等镜像创建容器,当作轻量的虚拟机来使用。
特别是现在随着系统、软件越来越多,开发测试环境越来越复杂,仅仅靠多用户共享的这种方式节省资源带来的后果就是环境完全不可控。Docker容器的出现让每个人仅仅通过一个几KB的Dockerfile文件就能构建一个自定义的系统镜像,进而启动一个完整系统容器,让人人都能成为 DevOps。
容器云主机也完全能像普通主机一样随意启动、稳定运行、关机、重启,所以在上面随意搭建博客,小网站,VPN代理服务器等也完全不在话下。除了常用的托管服务业务,你完全可以自定义任何用法,包括在上面使用任何云服务提供商的云硬盘、云数据库,部署各种你需要的服务。
目前docker容器管理服务器在windows下运行需要借助Toolbox工具,虽然微软在2014年底就计划提供Windows Server容器镜像但目前还没有发布,所以想在docker里跑windows系统的容器的人还需要等待,希望到时候微软能裁剪出一种轻巧的windows基础镜像,毕竟容器本身就是一种更轻量级的系统。
2、作为服务使用
如果你仅仅把docker容器当作一个轻量的固定虚拟机用,那其实只能算是另类用法,Docker容器最重要价值在于提供一整套平台无关的标准化技术,简化服务的部署、升级、维护,只要把需要运维的各种服务打包成标准的集装箱,就可以在任何能运行docker的环境下跑起来,达到开箱即用的效果,这个特点才是Docker容器风靡全球的根本原因。下面重点列举几个使用docker容器部署服务的场景
1、Web应用服务
Web应用服务是使用最广泛的一类服务,典型的架构是前端一个Tomcat + Java服务,后端mysql数据库。前端的Java web服务器是最适合使用Docker容器的,先将Java运行环境、web服务器直接打包成一个通用的基础docker镜像,之后再将自定义应用代码或编译程序包加入到该基础镜像中就能产生一个新的应用镜像,最后通过docker服务立马就能以容器的形式启动web应用服务。因为web应用程序一般是无状态的,随着业务访问量增减,用同样的镜像新建、销毁容器即可轻松实现伸缩
image
2、持续集成和持续部署
- continuous integration
-
continuous deployment
互联网行业倡导敏捷开发,持续集成部署CI/CD便是最典型的开发模式。使用docker容器云平台,就能实现从代码编写完成推送到git/svn后,自动触发后端CaaS平台将代码下载、编译并构建成测试docker镜像,再替换测试环境容器服务,自动在Jenkins或者Hudson中运行单元/集成测试,最后测试通过后,马上就能自动将新版本镜像更新到线上,完成服务升级。整个过程全自动化,一气呵成,最大程度地简化了运维成本,而且保证线上、线下环境完全一致,而且线上服务版本与git/svn发布分支也实现统一。
image
3、微服务架构使用
如果说上面两种应用场景还不足以体现出与传统的PaaS平台相比的巨大优势的话,那么对微服务的架构这种复杂又灵活的使用场景的无缝支持绝对具有革命意义。
微服务架构将传统分布式服务继续拆分解耦,形成一些更小服务模块,服务模块之间独立部署升级,这些特性与容器的轻量、高效部署不谋而合。如下图所示,每个容器里可以使用完全不同环境的镜像服务,容器启动即产生了一个独立的微服务主机节点(独立的网络ip),上层服务与下层服务之间服务发现通过环境变量注入、配置文件挂载等多种方式灵活解决,而且还可以直接将云平台提供的各种云服务与自定义的微服务整合组成一个强大的服务集群。
更重要的是,拥有如此多服务的集群环境迁移、复制也非常轻松,只需选择好各服务对应的docker服务镜像、配置好相互之间访问地址就能很快搭建出一份完全一样的新集群。
image
4、其他应用场景
一次性/定时任务
有些情况下用户只是需要执行一次性的任务,例如计算出某个结果即可,如果采用传统的服务模式,服务器需要一直运行,造成的极大的资源浪费。而容器的快速创建、销毁能很灵活满足这种完全按需付费的场景。只要制作好一次性程序运行的docker镜像,当需要运行的时候实时通过镜像创建出容器来执行任务,程序执行完成容器自动退出释放资源。
当然,容器本身只包含静态的镜像和上层的临时可读写层,运行的数据是不会持久化的,所以任务相关数据可以从云存储、云硬盘或者云端数据库里读写。
科学计算服务
在信息化的今天,除了计算机领域,自然科学等领域也越来越需要借助一些复杂的程序软件来做计算分析,如果还要求他们学习繁杂的服务运维部署就太麻烦了,国外就有科研人员用Docker自行部署IPython Notebook服务器开展数据科学研究的
网友评论