由于很多服务都部署到云平台,有必要了解docker
一、为什么会有Docker的出现
开发人员在将代码打包后交给运维部署,运维就说:“兄弟,不对呀,跑不通”。开发人员肯定是在本机跑通了的
为什么在开发人员那儿跑通了,在运维那儿就有问题呢?
环境和配置,比如开发人员是在Windows上开发的,运维要部署到阿里云或者ubantu上
所以Docker应运而生
这时运维就说:“兄弟,你能不能把你能运行的所有条件全部打包给我”
开发人员就给运维发过去这样一个pakage,这个war包是ok的,可以运行,包括代码、配置、系统、数据等等相关因素
举个例子:
假如你要搬家,你要把你的家具等一些零零碎碎的东西搬到新家,然后再在新家里面去重新布置,发现这又少了什么零件、那又少了什么零件,这就和上面的第一种一样
你要搬家,你找个塔吊、将你整个房子一起搬到另一个地方,房子里的东西和原来的一模一样,这就像上面的第二种
二、镜像
运维拿到开发人员的作品后,他需要其他人能够看得到,那么运维人员第一步就是要部署, 而现在由于高并发的环境和大流量的访问,所以都是需要集群
比如说开发人员交给运维10个完整的代码,每一台都需要去安装数据库、redis等等,这还只是10台,要是像618、双十一等活动,老板说把这个做扩容,做个80、100台,那这个时候运维已经疯了
有什么办法可以解决这种情况吗?
java有个特性叫封装,就是把公共的代码提出来,提高利用率。那么docker也是这样,把公共的环境打个包封装成镜像,然后每台机器有这么个镜像
所以开发人员需要给开发人员的是一个镜像,这个镜像是除了代码以外的环境配置等相关因素,只要开发人员能运行,那么运维人员也绝对能运行。一次封装,到处运行
logo的寓意
docker的logo是一条鲸鱼载着很多集装箱
比如:开发人员在本机跑的软甲需要用到redis3.0等四个环境(假如有四个),运维人员他已经安装了redis4.0,有时候换一个版本也许就跑步起来了
然后运维他不想装了,说:“你把你的redis等四个环境封装成四个集装箱,然后将四个集装箱构建成一个镜像文件”。
这个镜像文件中就有四个集装箱,每个集装箱都是开发人员本机环境的一个克隆,运维人员他就不会去装redis等环境了,他只需要装一个docker,就是那条鲸鱼
三、Docker能干什么
之前的虚拟化技术(VM)和容器虚拟技术有什么关系呢?
可以说参考了虚拟化技术得到了容器虚拟技术
他可以在一个操作系统里面安装另一个操作系统,比如在Windows上安装Linux
上图说明,灰色部分可以理解为Windows操作系统,然后就是包括Linux内核和各种库,最后就是再此之上装了一些软件,redis、mysql等等
虚拟机的缺点(centos)
资源占用多
冗余步骤多
启动慢
由于Linux的这些缺点,Linux发展出另一种虚拟化技术Linux容器(Linux Container),简称LXC
它只是取了Linux的内核,然后就是一些软件的容器运行在Linux系统上,可以说Linux容器就是一个取Linux系统之精华的环境
注:在centos上安装docker,centos版本在6.5或跟高版本
四、Docker仓库
提到仓库,会想到Git有本地仓库和远程仓库,我们完成了代码后会将本地的仓库代码push到远程仓库Github上,团队的其他同事去拉取
docker仓库也是类似,但提交的是除代码外的一个个镜像,比如redis、mysql等等,然后就可以告诉运维说我将镜像放到docker仓库了,运维会自己操作
有了仓库,运维怎么做?
(已redis为例)运维不再自己安装了,那么要从远程仓库上pull一个redis,pull下来的是一个镜像,某一个镜像的实例就是一个容器
简单说镜像就是模板,容器就是这个镜像的实例
docker的三要素:(面试可能问到!)
仓库、镜像、容器