在解答题主的问题以前,咱们先搞清楚下面三点:
1、为何使用Docker
2、使用Docker的正确姿式
3、Docker带来了哪些好处web
1、为何使用Docker
Docker一词意为码头工人,而Docker的功能也与集装箱相似。一般一个webapp并不会用到操做系统/虚拟机的所有功能,即操做系统/虚拟机对于一个webapp来讲太过笨重。打个比方说,我要从宿舍去食堂,我并不须要一架飞机,只须要一辆自行车就够了,而Docker镜像就至关因而一辆自行车。你能够把Docker镜像理解为轻量化的虚拟机,固然两者有所不一样,可是不在本文的讨论范围。sql
2、使用Docker的正确姿式
设想一个以下场景:
咱们须要一个webapp,其功能是用户注册并将注册信息插入到数据库,环境为Ubuntu+Tomcat+Mysql,怎么作?
不使用Docker的话,咱们一般会这样作,以Ubuntu为操做系统,而后安装Tomcat和MySQL,最后把app部署上就能够了。那么使用Docker会怎么作呢,在这个场景下,能够有两种方式:
1.仍然以Ubuntu为操做系统,而后构建一个安装有MySQL和Tomcat的Docker镜像,并把app部署到其中,最后启动Docker镜像就能够了。看起来好像和不使用Docker基本相同,甚至还要麻烦一些,是这样吗?别着急,继续往下看。
2.第二种方式则体现了Docker的"每一个容器只作一件事情"的思想,咱们构建两个镜像,一个仅安装Tomcat并部署咱们的app,另外一个仅安装MySQL,而后启动这两个镜像,获得两个容器,再利用Docker的容器互联技术将两者链接(Docker的容器是经过http链接的)。数据库
3、Docker带来了哪些好处
看完上面的例子,你可能仍然不会以为Docker有什么好处,其实真正使用了Docker以后,你会以为简直爱不释手。粗略来讲,Docker好处有:
1.保证了线上线下环境的一致性
咱们在线下的开发环境使用Docker构建好weaapp的镜像后,能够直接在线上使用一个镜像,保证了线上线下环境的一致性,不再会有在线下开发环境中运行正常,而部署到线上各类错误了。
2.极大的简化了webapp的部署流程
在不使用Docker时,咱们部署app时,要先搭建好app运行所需环境,这个过程作过的人都知道多么枯燥繁琐,一不当心还出错。而有了Docker,咱们只须要直接构建一个咱们webapp的镜像而后将其运行便可,不管在多少台服务器中部署,都是如此。再好比,使用Docker以前要搭建一个WordPress对于新手来讲是有些困难的,而有了Docker,只须要从DockerHub上pull一个WordPress镜像并启动就能够了,很是很是方便。
3.实现了沙盒机制,提升了安全性
因为webapp运行在容器中,与操做系统隔离开了,从而使操做系统基本不可能受到破坏,另外若是webapp由于攻击而瘫痪,并不须要重启服务器,直接重启容器或者再启动一个镜像就能够了。
4.实现了模块化,提升了复用性
在二中使用Docker的第二种方式就能够看出,咱们将数据库和Tomcat运行在不一样的容器中,从某种角度来讲,这也下降了模块之间的耦合性,便于拓展。好比咱们要把MySQL替换为oracle,只须要再构建一个oracle镜像并启动与Tomcat链接便可,很是方便。对于咱们构建的镜像,在其余app中直接拿来用就能够了,没必要重复劳动。
5.实现了虚拟化,提升硬件利用率
有了Docker,咱们能够在一台服务器上运行不少webapp,充分利用闲置资源。这时候,服务器的操做系统就相似于货轮,而一个个Docker容器就至关于货轮上的一个个集装箱。如今大热的云服务市场,很多就用了Docker。举个例子来讲,如今咱们有一台操做系统为Ubuntu14.04的服务器,咱们构建不一样版本的ubuntu镜像并启动,而且为不一样的用户分配不一样的容器。这样,用一台服务器
能够虚拟出n个运行着不一样操做系统的虚拟服务器,而对于用户来讲,这些是透明的––用户则认为本身拥有一台完整的服务器。据我推测,阿里云的服务器就是这么干的。这充分利用了闲置的硬件资源。ubuntu
我这里挂一漏万,Docker的好处远远不止这些。譬如使用Docker镜像实现磁盘快照功能,在不一样场景下有Docker不一样的使用姿式,至于更多奇技淫巧,则须要在使用过程在去发掘。安全
啰嗦了这么一大堆,接下来回答题主的问题。实际上不少问题前文都已经解答了。服务器
Docker的容器是以镜像来建立的,镜像是否是一个相似操做系统的环境?
是的,你能够将Docker理解为一个轻量化的虚拟机,至于咱们常常说的什么Tomcat镜像、MySQL镜像之类的,只是这个轻量化的虚拟机中安装了相应的软件。镜像的名字也就说明了镜像的功能。oracle
是否是到正式环境上还要安装Docker,而后把应用部署在其中?
是的,构建Docker镜像、运行Docker容器,都须要安装Docker,但这是一劳永逸的,由于咱们使用的是安装了各类各样功能软件的Docker镜像和Docker容器。app
若是是这样,那和我建立一个和生产环境同样的虚拟机来部署应用有什么区别?
首先这个问题能够用自行车和飞机的例子解答。其次安装Docker后,咱们能够从DockerHub上获取各类各样的操做系统镜像,这个操做很简单,只须要pull相应的镜像到本地而后运行便可,而安装不一样版本的虚拟机有多麻烦?另外DockerHub上有各类各样的优秀镜像,咱们直接拿来使用就能够了,不须要本身搭建,应用的部署就像搭积木同样简单。webapp