文章插图
Java识堂,一个高原创,高收藏,有干货的微信公众号,一起成长,一起进步,欢迎关注
Docker是什么?Docker是一个基于轻量级虚拟化技术的容器,整个项目基于Go语言开发,并采用了Apache 2.0协议 。Docker可以将我们的应用程序打包封装到一个容器中,该容器包含了应用程序的代码、运行环境、依赖库、配置文件等必需的资源,通过容器就可以实现方便快速并且与平台解耦的自动化部署方式,无论你部署时的环境如何,容器中的应用程序都会运行在同一种环境下 。
举个栗子,小明写了一个CMS系统,该系统的技术栈非常广,需要依赖于各种开源库和中间件 。如果按照纯手动的部署方式,小明需要安装各种开源软件,还需要写好每个开源软件的配置文件 。如果只是部署一次,这点时间开销还是可以接受的,但如果小明每隔几天就需要换个服务器去部署他的程序,那么这些繁琐的重复工作无疑是会令人发狂的 。这时候,Docker的用处就派上场了,小明只需要根据应用程序的部署步骤编写一份Dockerfile文件(将安装、配置等操作交由Docker自动化处理),然后构建并发布他的镜像,这样,不管在什么机器上,小明都只需要拉取他需要的镜像,然后就可以直接部署运行了,这正是Docker的魅力所在 。
那么镜像又是什么呢?镜像是Docker中的一个重要概念:
- Image(镜像):它类似于虚拟机中使用到的镜像,由于任何应用程序都需要有它自己的运行环境,Image就是用来提供所需运行环境的一个模板 。
- Container(容器):Container是Docker提供的一个抽象层,它就像一个轻量级的沙盒,其中包含了一个极简的Linux系统环境与运行在其中的应用程序 。Container是Image的运行实例(Image本身是只读的,Container启动时,Docker会在Image的上层创建一个可写层,任何在Container中的修改都不会影响到Image,如果想要在Image保存Container中的修改,Docker采用了基于Container生成新的Image层的策略),Docker引擎利用Container来操作并隔离每个应用(也就是说,每个容器中的应用都是互相独立的) 。
本文作者为SylvanasSun(sylvanas.sun@gmail.com),首发于SylvanasSun’s Blog 。Docker VS 虚拟机在上文中我们提到了Docker是基于轻量级虚拟化技术的,所以它与我们平常使用的虚拟机是不一样的 。虚拟机技术可以分成以下两类:
原文链接:sylvanassun.github.io/2017/11/19/…
(转载请务必保留本段声明,并且保留超链接 。)
文章插图
系统虚拟机
- 系统虚拟机:通过软件对计算机系统的模拟来提供一个真实计算机的替代品 。它是物理硬件的抽象并提供了运行完整操作系统所需的功能 。虚拟机通过物理机器来管理和共享硬件,这样实现了多个虚拟机环境彼此之间的隔离,一台机器上可以运行多个虚拟机,每个虚拟机包括一个操作系统的完整副本 。在系统虚拟机中,所运行的所有软件或操作都只会影响到该虚拟机的环境 。我们经常使用的VMWare就是系统虚拟机的实现 。
- 程序虚拟机:允许程序独立运行在平台之外 。比较典型的例子就是JVM,Java通过JVM这一抽象层使得Java程序与操作系统和硬件平台解耦(因为每个Java程序都是运行在JVM中的),因此实现了所谓的compile once, run everywhere 。
- 电磁炉用锅有讲究 电磁炉专用锅
- 【游戏世界】角色信息框的大妙用?这群玩家全玩明白了!
- 大厅挂画风水讲究-客厅风水
- 家居厨房有哪些风水讲究-家居风水
- 厨房吊顶风水讲究-家居风水
- 家居餐厅风水有讲究,餐厅的风水注意事项-家居风水
- 房屋卫生间的风水讲究-家居风水
- 家庭客厅风水讲究-客厅风水
- 卧室床位风水有讲究-家居风水
- 葡萄酒陈年可以更加成熟