从代码到上线, 云端Docker化持续交付实践

简介: 2016云栖大会·北京峰会于8月9号在国家会议中心拉开帷幕,在云栖社区开发者技术专场中,来自阿里云技术专家罗晶(瑶靖)为在场的听众带来《从代码到上线, 云端Docker化持续交付实践》精彩分享。

2016云栖大会·北京峰会于89号在国家会议中心拉开帷幕,在云栖社区开发者技术专场中,来自阿里云技术专家罗晶(瑶靖)为在场的听众带来《从代码到上线, 云端Docker化持续交付实践》精彩分享。

关于分享者:

罗晶,花名瑶靖。在加入阿里云之前,先后在支付宝平台数据技术事业群、百度基础架构部任职。现主要负责阿里云容器服务产品的集群管理系统的研发,从事容器的持续交付、持续集成的方案设计与实现。

演讲内容架构

  • 大话持续交付
  • 持续交付的前世
  • 容器化DevOps
  • 持续交付的今生

演讲主要内容

持续集成指的是,频繁地(一天多次)将代码集成到主干。持续集成的目的,就是让产品可以快速迭代,同时还能保持高质量。它的核心措施是,代码集成到主干之前,必须通过自动化测试。只要有一个测试用例失败,就不能集成。

fe28e6ce50c3caaa19c0bb11e67f8229ddaf8599

持续交付(Continuous delivery)指的是,频繁地将软件的新版本,交付给质量团队或者用户,以供评审。如果评审通过,代码就进入生产阶段。

持续交付可以看作持续集成的下一步。它强调的是,不管怎么更新,软件是随时随地可以交付的。

2e886256563efba6023ff93cd0c72d592c68b03a

持续集成和持续交付保证了软件的持续运行和有效反馈。

c0b4ba590916ac79010f397a9ae7a0e98d09581b

不同环境,不同交付运维方式。即便按照流程去做持续交付,系统地搭建出来整个持续集成的系统环境,一样会遇到七七八八这样的问题。就算是同一种语言,每一个开发者所依赖语言环境、依赖的包不一样,就会导致有非常多的编译环境,维护起来就很困难。

 

 

e6922161c4b138b1878700b0832498f2c16141b5

传统持续交付问题的根源在于:

  • 开发者交付的只有代码以及代码的依赖;
  • 运维者需要除了代码之外的运行环境,以及运行环境之间的依赖。

f8c5be1d5944ef54fdad2b1ffac42ccf2806c331

 

交付方式的变革

Docker的出现改变软件交付的方式。经济学家说过:没有集装箱,不可能有全球化。Docker就像把一堆零散的代码和我要的所有东西装在集装箱里,真正去交付给运维时,相当于把这个集装箱运行起来。它包含所有的环境依赖,所以在任何地方运行集装箱所达到的结果都是一样的。因为达到了环境一致性。

 

baa724109956da55e0d168ff8e700bf9687db10c

Docker之所以这么火,是由于它的敏捷、可移植、可控的特性决定的。敏捷意味着Docker可以秒级应用启动、轻量级隔离、细粒度资源控制、低性能损耗;可移植代表着Docker的环境无关的交付、部署方式、可用于软件生命周期中不同运行环境;可控表示容器级别的资源隔离和流控。

4217fb3639b65c0ef27b44fe105bd72d4a489b21

Docker Compose是Docker推出来的一个对多容器的编排技术,简单好用,便于开发。使用Docker Compose,可以一键构建本地开发环境,在团队中可以共享一份配置文件。它的优点是:

  • 简单好用,便于开发
  • 本地环境沙箱
  • UT环境
  • 编排容器、存储和网络

当然,它也存在不足:面向开发和部署,不支持自动化运维。

73fe4e39b9cc3f3c43a987284ede8625bd4e571d

Docker Swarm把一组Docker引擎抽象成一个Docker引擎,以前所有在单机上对一个Docker引擎的工作,都可以透明的变成对一组Docker集群上的节点的操作。Docker Swarm它的优点是:

  • 支持标准的 Docker API;
  • 灵活、可扩展、可插拔的容器调度。

当然,它也存在不足:面向容器、缺少服务生命周期支持。

5e6394f454f65ff30b46c5bf44af622b87317f60

容器服务上有三个层面的概念:

  • 资源层面——集群,节点。
  • 内容层面——Compose模板,镜像。
  • 应用层面——应用,服务,容器。

a0d0f745f524539b958a0bca6534387363f150da

容器化DevOps,可以实现:

  • 开发环境到生产环境的一致
  • 可编程基础设施
  • Infrastructure as Code
  • 不可变基础架构
  • Immutable infrastructure
  • 全流程工具化、自动化、持续交付
  • 降低试错成本,鼓励快速迭代

84a28162be9623676c9bc57cd7b1b5677f0f0355

简单的容器化持续交付流程如下图所示:

59a59604013de090dffdd35c3ba53e5018366605

复杂的容器化持续交付流程:开发人员在除了代码 、Config、Test脚本还要写Dockerfile。把这些代码传(Push)到代码仓库,有一个CI service通过代码仓库hook告诉你代码仓库有一个新的提交。把代码拉下来复制,进行两件事情 : Build和UT。在build的过程中,会从Docker Registry上面去拉下来( Pull )依赖的image,当build通过了之后会push image到这个Docker Registry单位里面去。然后CI 会有一个hook去通知CD,deploy Service根据Docker和image描述以及compose描述,把image部署到预发、测试或者生产环境。

9614c1a78d88bac46f2314532a9bbd1c215e1a09

持续交付“最后一公里”

发布时持续交付的“最后一公里”,常见的发布策略有蓝绿发布、金丝雀发布(灰度发布)、ABTest,在国内的开发者中,对这几个概念有独立的理解。

Rolling Update

  • 依次停止老容器,启动新容器
  • 整个过程自动化,无需用户手动操作
  • 适合于多副本的应用发布

fdcc58cfea7d3d3e78a6a50380bcd75374c92839

蓝绿发布(热部署)

  • 不会停止老容器,为新服务启动新容器
  • 需要用户设置路由权重,实现不同版本应用的上线、下线
  • 适合于版本的快速发布,不会停机影响用户

78d31cfb1f3fd783747026d03cf2a6ec079846d2

金丝雀发布(灰度)

  • 不会停止老容器,为新服务启动新容器
  • 需要用户设置路由权重,实现不同版本应用的共存
  • 支持A/B测试,适合多方案选择

7f144a8087c065f73a776026c6bb648031764ea2

相关文章
|
2月前
|
SQL 数据库 Docker
OBCP实践 - OceanBase Docker 体验
开发者和技术爱好者可以在无需复杂安装配置的情况下迅速搭建OceanBase数据库环境,从而方便地进行功能测试、性能评估或者开发调试等实践活动。同时,由于Docker的便捷性,此方法也支持跨平台部署,使得OceanBase数据库能够在不同的操作系统(如Linux、Windows、macOS)上轻松体验。
90 2
|
3月前
|
运维 云计算 Docker
深入理解与实践:基于Docker的微服务架构优化策略
本文旨在为软件开发和运维人员提供一个全面的指南,探讨如何通过Docker容器技术优化微服务架构。我们不仅深入分析了Docker在微服务环境中的关键作用,还提出了一系列实践策略,以提高部署效率、增强系统稳定性,并确保服务的可伸缩性和安全性。通过具体案例分析和比较传统部署方式的局限性,本文展示了Docker如何成为微服务架构优化不可或缺的工具,旨在帮助读者构建一个更加灵活、高效和可靠的服务环境。
154 1
|
2天前
|
存储 Ubuntu Linux
Docker 从入门到实践:Docker介绍
Docker 从入门到实践:Docker介绍
|
19天前
|
Java 测试技术 持续交付
云效产品使用常见问题之通过流水线构建的java代码,在docker文件里拿到失败如何解决
云效作为一款全面覆盖研发全生命周期管理的云端效能平台,致力于帮助企业实现高效协同、敏捷研发和持续交付。本合集收集整理了用户在使用云效过程中遇到的常见问题,问题涉及项目创建与管理、需求规划与迭代、代码托管与版本控制、自动化测试、持续集成与发布等方面。
|
21天前
|
存储 Kubernetes Docker
构建高效稳定的Docker容器集群:从原理到实践
【4月更文挑战第19天】 在当今微服务架构盛行的时代,容器化技术已经成为了软件开发和部署的标准实践。本文深入探讨了如何利用Docker容器技术,结合Kubernetes集群管理工具,构建一个高效、稳定且可扩展的容器化环境。文章首先简述了Docker的核心原理及其优势,接着详细阐述了Kubernetes的基本概念与组件,最后通过一个实际案例来指导读者如何从零开始搭建并优化一个基于Docker和Kubernetes的容器集群系统。
23 1
|
1月前
|
前端开发 Ubuntu 开发者
【Docker系列】Docker-核心概念/常用命令与项目部署实践
【4月更文挑战第1天】 Docker是容器化技术,打包应用及依赖,实现快速部署。核心概念包括镜像、容器和仓库。镜像是只读模板,容器是镜像运行实例,仓库用于存储和分发镜像。常用命令如`docker search`、`docker pull`、`docker images`、`docker ps`等。安装Docker在Ubuntu上涉及`apt-get update`、`install docker-ce`等步骤。了解这些基础,开发者能更高效地部署和管理应用。Docker简化了环境配置,增强了软件的可移植性和扩展性,是现代开发的必备技能。
450 3
|
2月前
|
监控 持续交付 Docker
深入浅出:基于Docker的微服务部署实践
【2月更文挑战第26天】在当前软件开发领域,微服务架构与容器化技术成为提升应用可伸缩性、可靠性和开发效率的关键手段。本文将深入探讨如何利用Docker容器技术实现微服务的快速部署与管理,涵盖环境搭建、服务打包、网络配置及持续集成等核心话题。通过实例演示,旨在为开发者提供一套行之有效的微服务部署解决方案。
|
2月前
|
Kubernetes Go 开发者
Go语言与Docker容器结合的实践应用与案例分析
【2月更文挑战第23天】本文通过分析实际案例,探讨了Go语言与Docker容器技术结合的实践应用。通过详细阐述Go语言在容器化环境中的开发优势,以及Docker容器技术在Go应用部署中的重要作用,本文旨在为读者提供Go语言与Docker容器结合的具体实现方法和实际应用场景。
|
2月前
|
Kubernetes 云计算 开发者
云计算中的容器化技术:Docker与Kubernetes的实践
云计算中的容器化技术:Docker与Kubernetes的实践
164 0
|
4月前
|
Java Docker Windows
Windows下部署SpringBoot的实践方案(Docker & Docker Desktop)
Windows下部署SpringBoot的实践方案(Docker & Docker Desktop)
82 0