这两年容器技术及其相关工具,平台异常火爆。在各大技术论坛或云计算峰会议题中,都会占很大比重,各主流云计算平台也无一例外地迅速提供了容器服务。
大厂都在用docker
搜索docker热度服务器


docker能干什么?网络


- 简化配置
- 这是Docker公司宣传的Docker的主要使用场景。虚拟机的最大好处是能在你的硬件设施上运行各类配置不同的平台(软件、系统),Docker在下降额外开销的状况下提供了一样的功能。它能让你将运行环境和配置放在代码中而后部署,同一个Docker的配置能够在不一样的环境中使用,这样就下降了硬件要求和应用环境之间耦合度。
- 代码流水线(Code Pipeline)
- 管理前一个场景对于管理代码的流水线起到了很大的帮助。代码从开发者的机器到最终在生产环境上的部署,须要通过不少的中间环境。而每个中间环境都有本身微小的差异,Docker给应用提供了一个从开发到上线均一致的环境,让代码的流水线变得简单很多。
- 提升开发效率
- 这就带来了一些额外的好处:Docker能提高开发者的开发效率。若是你想看一个详细一点的例子,能够参考Aater在DevOpsDays Austin 2014 大会或者是DockerCon上的演讲。不一样的开发环境中,咱们都想把两件事作好。一是咱们想让开发环境尽可能贴近生产环境,二是咱们想快速搭建开发环境。理想状态中,要达到第一个目标,咱们须要将每个服务都跑在独立的虚拟机中以便监控生产环境中服务的运行状态。然而,咱们却不想每次都须要网络链接,每次从新编译的时候远程链接上去特别麻烦。这就是Docker作的特别好的地方,开发环境的机器一般内存比较小,以前使用虚拟的时候,咱们常常须要为开发环境的机器加内存,而如今Docker能够轻易的让几十个服务在Docker中跑起来。
- 隔离应用
- 有不少种缘由会让你选择在一个机器上运行不一样的应用,好比以前提到的提升开发效率的场景等。咱们常常须要考虑两点,一是由于要下降成本而进行服务器整合,二是将一个总体式的应用拆分红松耦合的单个服务(译者注:微服务架构)。若是你想了解为何松耦合的应用这么重要,请参考Steve Yege的这篇论文,文中将Google和亚马逊作了比较。
- 整合服务器
- 正如经过虚拟机来整合多个应用,Docker隔离应用的能力使得Docker能够整合多个服务器以下降成本。因为没有多个操做系统的内存占用,以及能在多个实例之间共享没有使用的内存,Docker能够比虚拟机提供更好的服务器整合解决方案。
- 调试能力Docker
- 提供了不少的工具,这些工具不必定只是针对容器,可是却适用于容器。它们提供了不少的功能,包括能够为容器设置检查点、设置版本和查看两个容器之间的差异,这些特性能够帮助调试Bug。
- 多租户环境
- 另一个Docker有意思的使用场景是在多租户的应用中,它能够避免关键应用的重写。咱们一个特别的关于这个场景的例子是为IoT(译者注:物联网)的应用开发一个快速、易用的多租户环境。这种多租户的基本代码很是复杂,很难处理,从新规划这样一个应用不但消耗时间,也浪费金钱。使用Docker,能够为每个租户的应用层的多个实例建立隔离的环境,这不只简单并且成本低廉,固然这一切得益于Docker环境的启动速度和其高效的diff命令。
- 快速部署
- 在虚拟机以前,引入新的硬件资源须要消耗几天的时间。Docker的虚拟化技术将这个时间降到了几分钟,Docker只是建立一个容器进程而无需启动操做系统,这个过程只须要秒级的时间。这正是Google和Facebook都看重的特性。你能够在数据中心建立销毁资源而无需担忧从新启动带来的开销。一般数据中心的资源利用率只有30%,经过使用Docker并进行有效的资源分配能够提升资源的利用率。
容器编排工具架构
- kubernetes 和 docker swarm

DevOps = 文化+过程+工具框架
DevOps的出现有其必然性。在软件开发生命周期中,遇到了两次瓶颈。第一次瓶颈是在需求阶段和开发阶段之间,针对不断变化的需求,对软件开发者提出了高要求,后来出现了敏捷方法论,强调适应需求、快速迭代、持续交付。第二个瓶颈是在开发阶段和构建部署阶段之间,大量完成的开发任务可能阻塞在部署阶段,影响交付,因而有了DevOps。
DevOps的三大原则:运维
- 基础设施即代码(Infrastructure as Code)
- DeveOps的基础是将重复的事情使用自动化脚本或软件来实现,例如Docker(容器化)、Jenkins(持续集成)、Puppet(基础架构构建)、Vagrant(虚拟化平台)等
- 持续交付(Continuous Delivery)
- 持续交付是在生产环境发布可靠的软件并交付给用户使用。而持续部署则不必定交付给用户使用。涉及到2个时间,TTR(Time to Repair)修复时间,TTM(Time To Marketing)产品上线时间。要作到高效交付可靠的软件,须要尽量的减小这2个时间。部署能够有多种方式,好比蓝绿部署、金丝雀部署等。
- 协同工做(Culture of Collaboration)
- 开发者和运维人员必须按期进行密切的合做。开发应该把运维角色理解成软件的另外一个用户群体。协做有几个的建议:
- 一、自动化(减小没必要要的协做);
- 二、小范围(每次修改的内容不宜过多,减小发布的风险);
- 三、统一信息集散地(如wiki,让双方可以共享信息);
- 四、标准化协做工具(好比jenkins)
年薪前五的Docker职位:微服务
一、DevOps 工程师 工具
排在首位的是 DevOps 工程师,他们消除了开发、发布和 Ops 团队之间的沟通障碍,实现了更快更频繁的软件交付。测试
平均年薪: $119,552云计算
二、软件工程师 / 高级软件工程师
在这个角色中,你将使用 Docker 打包整个栈(例如应用程序的库、框架和代码自己),并将其做为一个单独的包发布——没必要担忧每一个单独的组件是否会在不一样的环境中运行。
平均年薪:$107,094 到 $117,927
三、软件架构师
专一于 DevOps 的软件架构师利用他们在配置、自动化和运维方面的经验来从新定义架构,构建沟统统道并作出高级设计选择。
平均年薪:$141,965
四、全栈开发人员
在这个角色中,你将把 Docker 归入到开发组合中,以加速应用程序的生产、测试和部署。
平均年薪: $110,848
五、云工程师
做为一名云工程师,你将利用 Docker 和其余工具来管理、自动化、扩展和监控云中的解决方案。
平均年薪: $118,365
容器和 Docker 在过去几年里改变了测试和软件工程, Docker 在 2018 年占容器使用量的 83%,2019 年占 99%,并且愈来愈多的企业在使用Docker。
文章综合整理于网络