前言
当开发的同学开发完app后,需要发布上线。这个时候需要负责运维的同学进行app的部署发布,但是这个系统的发布涉及到很多步骤,组件。比如需要部署mysql,redis,mongodb,kafka,es,tomcat等,除了单独部署组件,还需要配置集群模式,以上的节点又需要在另一台机器上部署,可能还需要部署zookeeper,nginx等。
之前的方式部署起来确实很麻烦,并且容易引发许多问题。
- 没有版本控制。如果发布新版本,则需要备份之前上线的版本,避免因本次版本上线失败,需要回滚。(如果运维同学忘记备份就GG了)。
- 没有统一配置。如果需要集群部署,则有可能因为各个节点的配置不一致,导致集群不生效。(运维同学再次背锅)。
- 没有统一环境。我们分为dev环境,uat环境,prod环境,如果因为环境不一致,也有可能造成因环境原因导致系统不work。
- 没有可移植性。
- 没有隔离性。如果MySQL,Redis等啥的都部署在一台服务器里,可能会相互影响,例如mysql占用的资源多,可能会导致其他组件资源占用少而pending,block等。
- 。。。
如何解决?
- 打包成部署包?例如Bin包,rpm包,统一配置。
- 其余则不太好解决,当然个人devops的能力有限,如果不使用docker,咱也不知道如何解决。
什么是docker
-
docker是一个开源的应用容器引擎,用于开发应用、交付(shipping)应用、运行应用,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows 机器上。
-
docker容器是轻量级的虚拟机,可以将操作系统底层虚拟机化,而虚拟机则是虚拟化硬件
-
docker允许用户将基础设施中的应用单独分割出来,形成更小的颗粒(容器)
-
docker容器完全使用沙箱机制,相互之间不会有任何接口。
-
docker 使用 Google 公司推出的 Go 语言 进行开发实现。
-
docker原来是dotCloud公司开发的,后来改名为docker。
-
docker行了进一步的封装,从文件系统、网络互联到进程隔离等等,极大的简化了容器的创建和维护。使得
Docker
技术比虚拟机技术更为轻便、快捷。
为什么使用docker
上述我能想到的问题,docker都能解决。这也就是我们为什么要使用docker的原因。
-
更合理的分配了资源,更高效的利用了系统资源
在启动docker容器的时候,可以合理的分配系统资源,并且由于docker容器本身具有隔离性,所以不会影响其他容器的运行,能高效利用系统资源
-
更快速的启动时间
由于直接运行于宿主内核,无需启动完整的操作系统,因此可以做到秒级、甚至毫秒级的启动时间。大大的节约了开发、测试、部署的时间。
-
统一环境,统一配置,可移植性
build once, run anywhere,屏蔽环境问题,使得docker容器可以更好的移植到其他环境服务器等。
-
版本控制
docker容器有版本,所以可以进行回滚操作。
总结:
- 容器技术,带来了更高的生产效率,同时降低了使用成本。
- Docker本身的技术门槛很低,各技术层次的人都可以从中受益。
- 总的一句话就是为了让开发同学,运维同学,测试同学和平共处。。。
docker vs vm
特性 | 容器 | 虚拟机 |
---|---|---|
启动 | 秒级 | 分钟级 |
硬盘使用 | 一般为 MB | 一般为 GB |
性能 | 接近原生 | 弱于 |
系统支持量 | 单机支持上千个容器 | 一般几十个 |
可以参考此文,可以更好地学习docker。
网友评论