暑期实习期间,所在的技术中台—效能研发团队规划设计并结合公司开源协同实现符合DevOps理念的研发工具平台,实现研发过程自动化、标准化;
实习期间对DevOps的理解一直懵懵懂懂,最近观看了阿里专家带你玩转容器云原生DevOps公开课开始系统的学习DevOps,所以根据学习视频整理出以下学习笔记希望分享给更多对此感兴趣的同学~
课程大纲如下图所示,会陆续进行更新:

如何快速高质量的应用容器化迁移

  • 1. 上节回顾
  • 2. 容器化交付流程阶段划分
  • 3. DockerFile入门及基本语法
  • 4. DockerFile语法
  • 5. DockerFile到Docker Image的底层原理
  • 6. DockerFile的优化实例
  • 7. 编排系统 k8s 入门
  • 8. 总结
  • 9. 工具推荐

本节内容是如何快速高质量的进行应用容器化的迁移,首先我们来回顾下上节内容 容器云原生DevOps——第一期:DevOps、微服务、容器服务(学习笔记)


1. 上节回顾

上一节介绍了三个非常重要的概念:DevOps容器微服务,以及它们之间如何有机的融合起来形成一个快速高质量的容器化交付链。

首先我们先回顾一下 DevOps 的概念。DevOps 是2007年的时候,一个比利时IT咨询师 Patrick 提出来的,他希望通过更优的组织架构和流程节约时间通过自动化的方式来提高交付速度和质量。但是很可惜,在当时的一个场景之下,大部分的公司都是采用大型单体结构的方式进行应用软件的设计,通过大兵团作战的方式来实现整个交付的流程,以及通过瀑布流的一个设计思想来去进行质量保证。所以这也是导致当时 DevOps 很难很难快速落地的一个原因。

然后在2014年的时候,微服务 的概念提出了,概念简单的用一句话来理解就是分而治之,将把一个大型的单体系统拆分成很多子的小型系统,且每一个小型系统都具备完整的一个生命周期管理,然后使用适合该小型系统的设计思路进行设计。拆分后的每一个系统组件都会相互在数据集隔离,都有自己的一个 scope,而这个 scope 又是和业务仅仅相结合的,且每一个组件都可以进行独立升级。也就是说当一个大型的系统通过微服务进行拆分的时候,其实无形中在架构上会变得越来越敏捷,然后在流程上可以让整个交付的一个流程变得越来越快速,这正是因为每一个组件的体量非常小且也有自己明确的一个 scope,所以可以更好的进行质量保证。所以从架构、流程、质量三方面来说,微服无形在概念上面弥补了 DevOps 很多缺失的部分。

但微服务它本身也不是一个十全十美的架构设计思路,当你把一个大型的系统拆分成很多子系统之后,如何有效的管理这么多的微服务,并且如何对快速的对每一个微服务进行独立升级又是新的问题,所以此时我们特别需要一种标准化的交付方式来去协助微服务的弊端。举一个简单的例子,我们采用传统结构开发的 Java 应用拆分成很多微服务后,每个服务可能采用不同的语言、不同的框架来去实现,这导致我们以前使用的很多基础的类库或者是公共框架都无法再使用,那此时怎么来实现不同的框架和语言之间的一个标准化呢?

容器 的出现就帮我们解决了这个问题,在使用容器的时候,通常会定义 DockerFile,然后在交付时会定义一些 yaml 文件或者是compose 文件。其中 DockerFile 就是标准化的一个部署的环境,而类似 base-compose 或者是 k8s 的restful api 是标准化的这个交付内容和交付动作,以及后来如果用一些编排系统,可能会有一些命令和 API,而这些 API 就是准化的运维操作。从这个角度来讲,容器实际上实现了一个标准化交付的场景。而标准化交付其实可以解决微服务场景中很多缺失的部分。而容器它也有它自身的一个问题,就是当你引入容器这种技术的时候,我们原本的这个交付产物是代码包比如说jar包、tar包等,但是使用容器时,我们使用的交付中间产物是 docker image,此时你的开发团队可能也要感知 容器架构引入而带来的上层应用架构的变化,所以容器也会有很多固有的问题。而容器大部分的问题可以用通过 DevOps 工具来解决,比如原本镜像打包的操作是在本地实现的,但现在可以通过 Jenkins 或 GitLab CI 来自动化解决,提高交付质量和交付速度。

所以我们看这三个概念,其实在各自的这个优势上面是相互互补的,而他们之间相互整合起来可以变成一个非常有机的可以高质量和快速的一个软件交付方式。所以这也是为什么,这三个概念最近经常被大家一起提到、一起出现的根本原因。

上节到后半部分,我们也给大家介绍了一些典型的容器交付流程,一个标准的容器交付流程大致就如下图所示:

开发者将代码提交到源代码管理中心,可能是 GitHub、GitLab 或 SVN。而云代码管理中心我会通过 Webhook 的方式通知 CI-Server,CI-Server 会运行客户在源代码里面包含的单元测试或其他测试的脚本,如果测试通过,它接下来会进行代码编译打包、镜像构建和推送的流程,然后进入到应用的部署的阶段,在不同的环境里边部署这个应用。最后这个环境里边会通过编排引擎来拉取镜像来实现一个容器化的一个部署。


2. 容器化交付流程阶段划分

如果我们将一个容器化交付流程进行阶段划分的话,其实可以划分成如下四个阶段:

  • 本地开发阶段。主要是代码编写、测试编写、DockerFile 编写、容器化测试、编排模板编写
  • 持续集成和持续交付阶段。主要进行代码构建、打包成构建产物、构建 docker image、推送 docker image 、部署编排模版
  • 环境部署阶段。主要是调整一些应用拓扑关系、调整接入层的配置、调整弹性扩缩容的配置等
  • 运维监控和调优阶段。一个就是基础监控资源的设置和告警;二是有些客户可能有更细腻度的监控或告警需求,会采用APM的方式内置一些 agent 来采集一些更细致的一些指标(比如网络的一些指标:类似TCP connection 数目、各种网络协议栈的状态);三是安装一些调优工具进行调优,例如大家可能接触的比较多的 top 、htop 等等。

本节课程主要关心的是怎么帮助大家进行本地开发阶段这个部分,主要会介绍怎么去编写高质量 DockerFile 以及容器编排引擎的一些内置的机制和原理,帮助大家快速入门编排模板的编写。


3. DockerFile入门及基本语法

下图是从 Docker 官网中摘录的最简化的一个 DockerFile

这四行简单的配置就把的一个 python 应用,从基础的环境到代码的准备、编译、运行完整的表达出来了,这就是一个最基本的 DockerFile,然后我们要做的就是通过按照 DockerFile 定义的规则编译打包生成一个 Docker image,命令如下所示:

# 通过DockerFile打包成镜像
docker build -t image:tag .

-t 表示用于指定镜像名和 tag id,.是需要打包的代码文件路径,这里表示当前路径(也就是在当前路径下有 DockerFile 以及对应需要打包的文件,如 jar包/tar包)


容器云原生DevOps学习笔记——第二期:如何快速高质量的应用容器化迁移相关推荐

  1. 容器云原生DevOps学习笔记——第三期:从零搭建CI/CD系统标准化交付流程

    暑期实习期间,所在的技术中台-效能研发团队规划设计并结合公司开源协同实现符合DevOps理念的研发工具平台,实现研发过程自动化.标准化: 实习期间对DevOps的理解一直懵懵懂懂,最近观看了阿里专家带 ...

  2. 软件工程学习笔记(七)~编写高质量代码

    1.下面的( )不是良好编码的原则.D A 在开始编码之前建立单元测试 B 建立一种有助于理解的直观布局 C 确保注释与代码完全一致 D 保持变量名简短以便代码紧凑 2.下面的( )是错误的.C A在 ...

  3. 云原生 DevOps,模型化应用交付能力的重要性

    撰稿:溪洋 审核校对:天元.海珠 编辑&排版:雯燕 云原生正在成为企业业务创新和解决规模化挑战的加速器. 云原生带来的变革绝不限于基础设施和应用架构等技术层面,更是对于研发理念.交付流程和 I ...

  4. 云原生 DevOps 的 5 步升级路径

    作者 | 张裕 编辑 | 雅纯 来源|阿里巴巴云原生公众号 什么是云原生 DevOps 点击查看视频:https://v.qq.com/x/page/u3220cutt7v.html 我们先通过上面一 ...

  5. 云原生 DevOps,模型化应用交付能力很重要

    简介:DevOps 文化及其支撑其落地实践的自动化工具与平台能力在云原生架构渐为普及的背后,发挥了关键的价值. 撰稿:溪洋 审核校对:天元.海珠 编辑&排版:雯燕 云原生正在成为企业业务创新和 ...

  6. 究竟什么是云原生DevOps呢?

    简介:究竟什么是云原生DevOps呢?我们认为:云原生DevOps是充分利用云原生基础设施,基于微服务/无服务架构体系和开源标准,语言和框架无关,具备持续交付和智能自运维能力,从而做到比传统DevOp ...

  7. 如何落地云原生DevOps?

    简介: 什么是云原生DevOps?在阿里内部有怎样的实践?企业又该如何落地?阿里云云效专家团队提出了下一代精益产品开发方法体系--ALPD,提供了系统的云原生DevOps落地的方法支撑,帮助企业渐进式 ...

  8. 云原生DevOps的5步升级路径

    简介: 究竟什么是云原生DevOps呢?我们认为:云原生DevOps是充分利用云原生基础设施,基于微服务/无服务架构体系和开源标准,语言和框架无关,具备持续交付和智能自运维能力,从而做到比传统DevO ...

  9. 夯实基础,踏步云升 | 云原生 DevOps 入门必读

    近年来,随着云计算的深入发展,云服务.虚拟机.微服务逐步普及,如今软件开发任务对从业者提出了更高的技能要求.因此,软件工程师们不仅要会写代码,懂业务规则,还须清楚自己的代码是如何部署到云端或虚拟机上, ...

最新文章

  1. xadmin后台页面定制和添加服务器监控组件
  2. 电脑DIY之内存传输标准
  3. Net混淆与用de4dot工具破解
  4. 1.4- 定时任务总结之九句箴言
  5. STL之双向循环链表(List)的内部关系
  6. Xcode7 Xcode6 中添加pch文件
  7. linux关闭自动更新,Ubuntu开启系统自动升级与取消自动更新的方法,
  8. 多线程模拟实现生产者/消费者模型 (借鉴)
  9. 孙鑫-MFC笔记六--绘图,重绘
  10. matplotlib库使用
  11. VBA调用程序时,exe程序一闪而过,解决方法
  12. 计算机网络课程设计小型企业局域网的组建,计算机网络课程设计小型企业局域网的组建.doc...
  13. 用pano2vr创建全景图
  14. Python 流程控制
  15. windows系统升级
  16. 线下活动报名|增长骇客:如何利用数据「玩」出新意
  17. Linux 使用ffmpeg修改和压缩视频文件格式
  18. 黑马SpringBoot --基础篇
  19. 那些不能在一起吃的水果搭配
  20. java groovy集成_java与Groovy的整合

热门文章

  1. 浅显易懂 Makefile 入门 (06)— 文件名操作函数(dir、notdir、suffix、basename、addsuffix、addperfix、join、wildcard)
  2. HTTP服务器端常用推送技术
  3. 什么是高/低方差、高/低偏差、(推荐阅读)
  4. python 替换字符串的方法replace()、正则re.sub()
  5. BiLSTM-CRF学习笔记(原理和理解) 维特比
  6. Gitea——私有git服务器搭建详细教程
  7. CPU/GPU/TPU/NPU...XPU都是什么意思?
  8. 聚类Clustering
  9. 机器学习PAL产品优势
  10. TensorRT 数据和表格示例