专栏首页编程坑太多『中级篇』docker导学(一)

『中级篇』docker导学(一)

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

大厂

  • 阿里巴巴
  • 京东
  • 美团
  • 百度
  • 腾讯
  • 浪潮
  • 滴滴

搜索docker热度

  • docker关键字的分布

『中级篇』docker的重点

『初级篇』目的先学会用。『中级』篇就是为了让你懂,师傅教徒弟,讲给你听,做给你看,自己做做试试。『初级篇』可能留了一些坑,在实践中只限github+jenkins+docker(提交代码自动jenkins打包docker完成系统发布),但是没有实践的应用起来只是让大家理解动手练了下,这次就是要直接对出来实践!突出真实的运营场景,kubernetes加入在『中级篇』中。是不是美滋滋。

docker能干什么

  • 简化配置

这是Docker公司宣传的Docker的主要使用场景。虚拟机的最大好处是能在你的硬件设施上运行各种配置不一样的平台(软件、系统),Docker在降低额外开销的情况下提供了同样的功能。它能让你将运行环境和配置放在代码中然后部署,同一个Docker的配置可以在不同的环境中使用,这样就降低了硬件要求和应用环境之间耦合度。

  • 代码流水线(CodePipeline)

管理前一个场景对于管理代码的流水线起到了很大的帮助。代码从开发者的机器到最终在生产环境上的部署,需要经过很多的中间环境。而每一个中间环境都有自己微小的差别,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的三大原则:

  • 基础设施即代码(InfrastructureasCode)

DeveOps的基础是将重复的事情使用自动化脚本或软件来实现,例如Docker(容器化)、Jenkins(持续集成)、Puppet(基础架构构建)、Vagrant(虚拟化平台)等

  • 持续交付(ContinuousDelivery)

持续交付是在生产环境发布可靠的软件并交付给用户使用。而持续部署则不一定交付给用户使用。涉及到2个时间,TTR(Time to Repair)修复时间,TTM(Time To Marketing)产品上线时间。要做到高效交付可靠的软件,需要尽可能的减少这2个时间。部署可以有多种方式,比如蓝绿部署、金丝雀部署等。

  • 协同工作(CultureofCollaboration)

开发者和运维人员必须定期进行密切的合作。开发应该把运维角色理解成软件的另一个用户群体。

协作有几个的建议:

1、自动化(减少不必要的协作);

2、小范围(每次修改的内容不宜过多,减少发布的风险);

3、统一信息集散地(如wiki,让双方能够共享信息);

4、标准化协作工具(比如jenkins)


本文分享自微信公众号 - 编程坑太多(idig88)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-05-20

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 『中级篇』Docker-cloud介绍(54)

    PS:以上这个图就是以后咱们通过docker需要实现的流程,也是目前很多大型互联网公司的流程。重要信息:Docker云集群和应用管理服务将会在五月廿一日关闭。用...

    IT故事会
  • 『中级篇』Docker-cloud介绍(54)

    PS:以上这个图就是以后咱们通过docker需要实现的流程,也是目前很多大型互联网公司的流程。重要信息:Docker云集群和应用管理服务将会在五月廿一日关闭。用...

    IT故事会
  • 『中级篇』docker架构和底层技术(12)

    PS:这里面很多底层的技术,说实话,还是感觉不需要那么急着了解这些底层linux的技术,随着咱们慢慢对docker深入认识,里面的技术细节也会展开深入的的说。

    IT故事会
  • Docker入门(一)-- 基础概念与安装

    Docker最初是dotCloud公司的创始人Solomon Hyks在法国期间发起的一个公司内部项目,它是基于dotCloud公司多年云服务技术的一次革新,并...

    CodingDiray
  • docker学习笔记

    Docker是一个开源的引擎,可以轻松的为任何应用创建一个轻量级的、可移植的、自给自足的容器。简言之,docker就是用go开发的一种轻量级虚拟化容器。

    程序员同行者
  • 10分钟看懂Docker和K8S

    2010年,几个搞IT的年轻人,在美国旧金山成立了一家名叫“dotCloud”的公司。

    鲜枣课堂
  • 10分钟看懂Docker和kubernetes

    2010年,几个搞IT的年轻人,在美国旧金山成立了一家名叫“dotCloud”的公司。

    kubernetes中文社区
  • docker入门学习(1)

    1、简化程序: Docker 让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,便可以实现虚拟化。Docke...

    RobinsonZhang
  • 高中生也能读懂的Docker入门教程

    Docker 是 Golang 编写的, 自 2013 年推出以来,受到越来越多的开发者的关注。如果你关注最新的技术发展,那么你一定听说过 Docker。不管...

    小小科
  • Docker 概述

    Docker 是一个应用程序开发、部署、运行的平台,使用 go 语言开发。相较于传统的主机虚拟化,Docker 提供了轻量级的应用隔离方案,并且为我们提供了应用...

    大江小浪

扫码关注云+社区

领取腾讯云代金券