赞
踩
自从docker
发布以来,越来越多的企业开始使用docker来部署自己的环境,原因在于其超高的部署效率以及不同容器间优秀的隔离功能(即:虽然所有容器都部署在一台机器上,但是彼此之间几乎没有联系,只能通过类似网络的方式来实现通信,各个模块之间互不影响,即使一个模块down掉,也不会对其他的模块构成影响,就像部署在不同的机器上一样,但是又和虚拟机有着本质上的差别),很多人尤其是刚入门docker的小白很容易将docker比作另一个版本的虚拟机来理解,其实这样是非常错误的做法。
所谓虚拟机
,顾名思义,就是虚拟出来的机器,即通过软件的形式模拟出机器的各种部件,例如内存
和CPU
等,然后将实际的操作系统镜像安装与这些虚拟出来软件之上,由此可以看出,虚拟机
实际上的资源应用效率是比较低的,因为它要经历整个硬件→系统→软件→模拟硬件→系统→应用
的过程;
与虚拟机不同,docker
实际上是一种服务,类似于mysql
、nginx
等,是一种运行于操作系统之上的应用程序,而每一个容器
则是这个应用程序里的一个进程,所有的容器
共用操作系统的资源,但是彼此之间却相互隔离,启动一个容器
就是启动一个新的进程,所以虚拟机的启动往往是分钟级
,而容器的启动往往是秒级
的,docker
相比起虚拟机
性能也会高很多(虽然从定义上来讲,两者压根就没有什么可比性,没有人会在部署服务器上再装一个虚拟机来部署单个应用吧?尤其是当部署服务器本身就是一个虚拟机的时候)。
如上图所示,从外到达内部的
application
所经历的层数越多,最外层的物理资源就消耗的越多。应用的整体性能就越低。
要了解docker
,首先要了解docker的组成,docker主要的组成有镜像
、容器
、本地仓库
等。
镜像(image)
:可以理解为将要部署应用的静态数据,这些静态数据就部署在docker的仓库中(“仓库”分为“本地仓库”和“远程仓库”,“远程仓库”后面会讲到),docker就是使用这些镜像文件实例化出对应的容器
,这些容器便会对外提供具体的服务。容器(container)
:容器是由镜像
实例化出来的一个具体服务应用,一个镜像可以并行开启多个容器(前提是启动端口不能相同),每开启一个容器
,docker服务就会开启一个新的进程。本地仓库(local hub)
:顾名思义,本地仓库就是保存具体镜像的逻辑空间(实际物理空间存放于某个目录中)。一般情况下,在生产环境中部署docker集群应用需要用到三个模块部署服务器
、docker远程仓库
、生产环境
。
首先在需要保证所有模块都已经安装了docker服务,由于所有应用都需要使用docker来下发,所以每一台机器(无论真实物理机还是虚拟机都需要)。
docker应用镜像
静态文件拷贝到部署服务器上docker应用镜像
静态文件加载到本地仓库(参考命令:docker load < xxx.tar
)远程仓库
服务(例如: Harbor,具体参靠《docker搭建私有仓库》)。docker tag www.xxx.com/project/app1:version-xxx <remote-host>/project/app1:version-xxx
)docker push <remote-host>/project/app1:version-xxx
)ansible
工具而不是直接登录到生产环境的实体服务器上,具体的ansible
教程可参考《ansible自动化运维工具》。(参考命令:docker pull <remote-host>/project/app1:version-xxx
)docker run -d --name xxx <remote-host>/project/app1:version-xxx
)具体参考《docker学习笔记》
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。