开发人员开发完一个电商项目,该Jar项目包含Redis、MySQL、ES、Haddop等若干组件。开发人员自测无误后提交给测试进行预生产测试了。
测试:你的这个服务,我在进行单元测试跟数据核对的时候总是出现不知名的bug!你要不要来看下啊?开发:你咋测试的?是按照操作文档一步步来的么?测试:绝对是按照文档来的啊!开发:你重启了吗?清缓存了吗?代码是最新版吗?你用的是Chrome浏览器?你是不是动啥东西了?测试:这..这..这..我啥也没干啊!
至此,开发跟测试之间的爱恨情仇正式开始!
1Docker简介1.1Docker由来Docker是基于Go语言开发的一个容器引擎,Docker是应用程序与系统之间的隔离层。通常应用程序对安装的系统环境会有各种严格要求,当服务器很多时部署时系统环境的配置工作是非常繁琐的。Docker让应用程序不必再关心主机环境,各个应用安装在Docker镜像里,Docker引擎负责运行包裹了应用程序的docker镜像。
Docker的理念是让开发人员可以简单地把应用程序及依赖装载到容器中,然后轻松地部署到任何地方,Docker具有如下特性。
Docker容器是轻量级的虚拟技术,占用更少系统资源。使用Docker容器,不同团队(如开发、测试,运维)之间更容易合作。可以在任何地方部署Docker容器,比如在任何物理和虚拟机上,甚至在云上。由于Docker容器非常轻量级,因此可扩展性很强。1.2Docker基本组成镜像(image):
Docker镜像就好比是一个目标,可以通过这个目标来创建容器服务,可以简单的理解为编程语言中的类。
容器(container):
Docker利用容器技术,独立运行一个或者一组应用,容器是通过镜像来创建的,在容器中可执行启动、停止、删除等基本命令,最终服务运行或者项目运行就是在容器中的,可理解为是类的实例。
仓库(repository):
仓库就是存放镜像的地方!仓库分为公有仓库和私有仓库,类似Git。一般我们用的时候都是用国内docker镜像来加速。
1.3VM跟Docker虚拟机:
传统的虚拟机需要模拟整台机器包括硬件,每台虚拟机都需要有自己的操作系统,虚拟机一旦被开启,预分配给他的资源将全部被占用。每一个虚拟机包括应用,必要的二进制和库,以及一个完整的用户操作系统。
Docker:
容器技术是和我们的宿主机共享硬件资源及操作系统可以实现资源的动态分配。容器包含应用和其所有的依赖包,但是与其他容器共享内核。容器在宿主机操作系统中,在用户空间以分离的进程运行。
比对项Container(容器)VM(虚拟机)启动速度秒级分钟级运行性能接近原生有所损失磁盘占用MBGB数量成百上千一般几十台隔离性进程级别系统级别操作系统只支持Linux几乎所有封装程度只打包项目代码和依赖关系共享宿主机内核完整的操作系统1.4Docker跟DevOpsDevOps是一组过程、方法与系统的统称,用于促进开发(应用程序/软件工程)、技术运营和质量保障(QA)部门之间的沟通、协作与整合。
DevOps是两个传统角色Dev(Development)和Ops(Operations)的结合,Dev负责开发,Ops负责部署上线,但Ops对Dev开发的应用缺少足够的了解,而Dev来负责上线,很多服务软件不知如何部署运行,二者中间有一道明显的鸿沟,DevOps就是为了弥补这道鸿沟。DevOps要做的事,是偏Ops的;但是做这个事的人,是偏Dev的,说白了就是要有一个了解Dev的人能把Ops的事干了。而Docker是适合DevOps的。
1.5Docker跟k8sk8s的全称是kubernetes,它是基于容器的集群管理平台,是管理应用的全生命周期的一个工具,从创建应用、应用的部署、应用提供服务、扩容缩容应用、应用更新、都非常的方便,而且可以做到故障自愈,例如一个服务器挂了,可以自动将这个服务器上的服务调度到另外一个主机上进行运行,无需进行人工干涉。k8s依托于Google自家的强大实践应用,目前市场占有率已经超过Docker自带的Swarm了。
如果你有很多Docker容器要启动、维护、监控,那就上k8s吧!
1.6helloworlddockerrunhello-world的大致流程图如下:
2Docker常见指令官方文档: