Docker可以将复杂的应用程序运行环境部署打包,这样就避免开发人员或者运维人员反复部署相同的应用程序运行环境。在如今云计算盛行的情况下,分布式应用和管理变得简单了。基本上云计算服务平台都提供了现成的群集计算服务,这些群集服务无一例外都是基于docker镜像构建的。群集应用的要求就是每个节点的应用程序版本以及环境要一致,一个docker镜像就是一个虚拟主机,只要放到容器中即可实现单机独立运行的效果,大大简化了分布式群集应用的实现过程
docker可以说是一大神器。从15年开始工作,就可以接触docker,到现在已历时5年,从最开始的原生部署,dockerrun启动,到jekenis自动化部署,到如今公司的自研自动部署平台,作为研发,实际接触docker的机会越来越少,但间接接触docker的几乎每时每刻。申请测试环境,运维侧会给你一个docker容器,线上部署应用,还是n多的docker,申请弹性数据库,还是一组docker集群。docker基本上已融入互联网公司的角角落落。那我简单来说说为什么使用docker。其
一,环境部署更快捷。搭建一个javaweb运行的环境,需要安装jdk,安装tomcat,有时还需要安装nginx,而使用docker,直接从docker仓库【/】中拉取一个包含jdk tomcat nginx的基础镜像,把我们的应用代码打入,就可以启动,其速度更快捷。其
二,更轻松的迁移。我们在测试环境中部署了我们的应用,测试通过,可以很轻松的把我们的应用镜像移植到线上环境中,而不用考虑环境不一致的问题。其
三,使用docker可以通过定制应用镜像来实现持续集成、持续交付、部署。所有的东西都在Dockerfile上,所有的人员都可以通过Dockerfile查看其中的依赖。除上述的原因外,docker高效的利用系统资源、快速的启动时间以及轻松的维护和扩展等特性也是赞誉一片。比如docker使用的分层存储以及镜像的技术,使得应用重复部分的复用更为容易,也使得应用的维护更新更加简单,基于基础镜像进一步扩展镜像也变得非常简单。而随着docker容器化的发展,集群化、基础化的特点突出,一个微服务集群,成百上千的docker,大公司一般都是通过开源或者自研的方案解决其自动化部署和容器管理的问题,研发接触docker的机会也越来越少,但是其中的技术原理应该了解,并能够自己构建镜像并部署容器,这对个人的发展有一定的好处。作者:夕阳雨晴,欢迎关注我的头条号:偶尔美文,主流Java,为你讲述不一样的码农生活。
一个非常好的问题,我是工作多年的Web应用架构师,来回答一下这个问题。欢迎关注我,了解更多IT专业知识。回答之前,先反问一个问题:为什么不用Docker呢?Docker出现之前,有现在还在用的VMWare虚拟机,有Ghost,部分解决了服务器安装配置的琐碎工作,但是没有解决运行环境的问题。比如常见的环境不一致的问题:开发环境能运行,测试生产环境有bug?还有就是每次新服务器、新环境搭建时无穷无尽的问题。那么Docker出现后,整个环境被打包起来,也就是将所有安装配置代码化自动化了,结合资源编排和云服务,可以秒启一个集群化的web服务系统,如果没有容器技术是做不到的。Docker是使用最普遍的容器技术,事实上的容器技术标准。推荐看一个Docker秒启Web服务的视频:/i/重播播放00:00/00:00直播00:00进入全屏点击按住可拖动视频
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的Linux或Windows机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。Docker跟传统的虚拟化方式相比具有众多的优势,如下列出一些它的优势。更高效的利用系统资源由于容器不需要进行硬件虚拟以及运行完整操作系统等额外开销,Docker对系统资源的利用率更高。无论是应用执行速度、内存损耗或者文件存储速度,都要比传统虚拟机技术更高效。因此,相比虚拟机技术,一个相同配置的主机,往往可以运行更多数量的应用。更快速的启动时间传统的虚拟机技术启动应用服务往往需要数分钟,而Docker容器应用,由于直接运行于宿主内核,无需启动完整的操作系统,因此可以做到秒级、甚至毫秒级的启动时间。大大的节约了开发、测试、部署的时间。一致的运行环境开发过程中一个常见的问题是环境一致性问题。由于开发环境、测试环境、生产环境不一致,导致有些bug并未在开发过程中被发现。而Docker的镜像提供了除内核外完整的运行时环境,确保了应用运行环境一致性,从而不会再出现「这段代码在我机器上没问题啊」这类问题。持续交付和部署对开发和运维(DevOps)人员来说,最希望的就是一次创建或配置,可以在任意地方正常运行。使用Docker可以通过定制应用镜像来实现持续集成、持续交付、部署。开发人员可以通过Dockerfile来进行镜像构建,并结合持续集成(ContinuousIntegration)系统进行集成测试,而运维人员则可以直接在生产环境中快速部署该镜像,甚至结合持续部署(ContinuousDelivery/Deployment)系统进行自动部署。而且使用Dockerfile使镜像构建透明化,不仅仅开发团队可以理解应用运行环境,也方便运维团队理解应用运行所需条件,帮助更好的生产环境中部署该镜像。更轻松的移植由于Docker确保了执行环境的一致性,使得应用的迁移更加容易。Docker可以在很多平台上运行,无论是物理机、虚拟机、公有云、私有云,甚至是笔记本,其运行结果是一致的。因此用户可以很轻易的将在一个平台上运行的应用,迁移到另一个平台上,而不用担心运行环境的变化导致应用无法正常运行的情况。更轻松的维护和扩展Docker使用的分层存储以及镜像的技术,使得应用重复部分的复用更为容易,也使得应用的维护更新更加简单,基于基础镜像进一步扩展镜像也变得非常简单。此外,Docker团队同各个开源项目团队一起维护了一大批高质量的官方镜像,既可以直接在生产环境使用,又可以作为基础进一步定制,大大的降低了应用服务的镜像制作成本。更好的隔离性用上了docker容器后,将Docker可以将我们的应用程序打包封装到一个容器中。该容器包含了应用程序的代码、运行环境、依赖库、配置文件等必需的资源。容器之间达到进程级别的隔离,在容器中的操作,不会影响道宿主机和其他容器,这样就不会出现应用之间相互影响的情形。
DockerDocker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的Linux或Windows机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。Docker特性Automatingthepackaginganddeploymentofapplications(使应用的打包与部署自动化)Creationoflightweight,privatePAASenvironments(创建轻量、私密的PAAS环境)Automatedtestingandcontinuousintegration/deployment(实现自动化测试和持续的集成/部署)Deployingandscalingwebapps,databasesandbackendservices(部署与扩展webapp、数据库和后台服务)Docker解决的问题应用更新发布及部署低效云计算、大数据,移动技术的快速发展,加之企业业务需求的不断变化,导致企业架构要随时更改以适合业务需求,跟上技术更新的步伐。毫无疑问,这些重担都将压在企业开发人员身上;团队之间如何高效协调,快速交付产品,快速部署应用,以及满足企业业务需求,是开发人员亟需解决的问题。Docker技术恰好可以帮助开发人员解决这些问题。环境一致性难以保证为了解决开发人员和运维人员之间的协作关系,加快应用交付速度,越来越多的企业引入了DevOps这一概念。但是,传统的开发过程中,开发、测试、运维是三个独立运作的团队,团队之间沟通不畅,开发运维之间冲突时有发生,导致协作效率低下,产品交付延迟,影响了企业的业务运行。Docker技术将应用以集装箱的方式打包交付,使应用在不同的团队中共享,通过镜像的方式应用可以部署于任何环境中。这样避免了各团队之间的协作问题的出现,成为企业实现DevOps目标的重要工具。以容器方式交付的Docker技术支持不断地开发迭代,大大提升了产品开发和交付速度。不同环境迁移成本高此外,与通过Hypervisor把底层设备虚拟化的虚拟机不同,Docker直接移植于Linux内核之上,通过运行Linux进程将底层设备虚拟隔离,这样系统性能的损耗也要比虚拟机低的多,几乎可以忽略。同时,Docker应用容器的启停非常高效,可以支持大规模的分布系统的水平扩展,真正给企业开发带来福音。Docker很大程度上解决了上述问题,提高开发和运维的工作效率,提高企业的工作效率。Docker的未来任何一项新技术的出现,都需要一个发展过程,比如云计算为企业所接受用了将近五年左右时间,OpenStack技术也经历了两、三年才受到人们的认可。因此,虽然Docker技术发展很快,但技术还不够成熟,对存储的灵活的支持、网络的开销和兼容性方面还存在限制,这是Docker没有被企业大范围使用的一个主要原因。另外一个原因是企业文化是否与DevOps运动一致,只有企业支持DevOps,才能更大地发挥Docker的价值。最后一个原因就是安全性问题,Docker对于Linux这一层的安全的隔离还有待改进,才能进一步得到企业的认可。