【阿里在线技术峰会】易立:从Docker到容器服务 ——Docker 云端实践之路

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 在首届阿里巴巴在线峰会上,阿里云技术专家易立为大家带来了题为《从Docker到容器服务——Docker 云端实践之路》的分享,主要分享内容是对Docker编排技术进行概述,接着重点介绍了新的概念——Container as a Service,包括微服务支持和DevOps,最后分享了Docker的最

本文主要从Docker的编排技术,Docker在一个大规模生产环境中的使用开始切入,围绕Docker应用的深化,像谷歌,AWS,阿里云都推出了这样的容器服务,分享并分析了新的概念——Container as a Service,着重讲解了微服务支持和DevOps,并谈及了容器服务解决了哪些问题,最后介绍了Docker的最新发展趋势。

直播视频:点此进入

PDF 下载: 点此进入

以下为整理内容:


Docker编排技术

大家都已经了解了Docker是什么样的技术,Docker是标准化的构建、交付、运维手段。但直到今天还有很多人在质疑,Docker只不过是容器技术的一种实现,为什么会这么火呢?


 

Docker最大的价值不在于技术,而在于它使人们达成了某种共识,以一种标准化的方法来开发、交付和运维软件,使得把我们的应用和应用运行过程中的依赖打成Docker镜像,通过Docker镜像,我们可以在开发、测试、线上等各个阶段来使用,我们也可以在笔记本、测试机或是云上来运行程序。通过这个标准化,催生了一个巨大的生态,让Docker具有巨大的价值。

Docker的核心亮点有以下几个方面:

  • 敏捷:秒级应用启动、轻量级隔离、细粒度资源控制、低性能损耗。
  • 可移植性: 环境无关的交付、部署方式;可用于软件生命周期中不同运行环境。
  • 可控:标准化推动自动化,提高运维效率和规模;隔离性提升应用安全性;版本管理可追溯。

 

Docker与虚拟化技术


Docker不是虚拟化技术的颠覆者,Docker容器和虚拟化技术是互补、双赢的。Docker是一种轻量级的操作系统虚拟化方案,利用虚拟机提供弹性基础架构,更好的安全隔离,动态热迁移,可以更好的保证业务的安全性和连续性,而利用容器技术也可以简化迁云之路,实现无边界的云计算。

Docker本身巨大的成功是根据几个巨大的趋势结合在一起才凸显了它的价值。Docker重点介绍3个方向,Docker在云计算上扮演着重要的工作,还有(Microservices)微服务架构,企业最关心的是IT部门的效率,最快速度的交付产品、最低成本的试错,才能快速的迭代、快速的演进,微服务架构可以帮助企业走向这步,微服务架构给底层的基础设施和部署带来巨大的挑战,利用Docker可以解决这个问题。DevOps,开发人员和运维人员理解的DevOps是不一样的,Docker可以使二者结合在一起。 

容器编排 —— Docker Compose

Docker引擎是把应用包装在一个Docker镜像里,然后启动Docker镜像变成一个容器,但是它带来的帮助是有限的,任何一个复杂的应用不是一个容器就能完成的,一定是一组容器相互协同才能完成一个完整的应用栈。Docker Compose是Docker推出来的一个对多容器的编排技术,简单好用,便于开发。使用Docker Compose,可以一键构建本地开发环境,在团队中可以共享一份配置文件。

Docker Compose面向开发和部署,不支持自动化运维,只是面向单机的一个环境。Docker Compose目前还只是一个开发工具,能够帮助部署一个Docker化的多容器应用,部署后它就置之不理了。 

容器集群管理 ——Docker Swarm


 

Docker Swarm的优点:兼容标准的Docker API,灵活、可插拔的容器调度

在生产环境中,我们希望有一个集群。从流量的角度,我们希望有更大规模能够部署更多的应用,在高可用的情况下,不可能把应用部署在只有一台节点的机器上。Docker Swarm把一组Docker引擎抽象成一个Docker引擎,以前所有在单机上对一个Docker引擎的工作,都可以透明的变成对一组Docker集群上的节点的操作。在Docker Swarm集群中,有两类节点,一是Docker Swarm Managers,这些Managers负责接收用户的请求,并且根据集群的状态来做一些任务的下发,真正的任务是在Work节点完成的,每个Work上都会安装一个agent,Work会上报到一个分布式的KV里,告诉这个节点的状态是死是活,有了这些信息,Manager就可以做决策。

Docker Swarm也有它的不足,它的抽象级别太低,面向容器、缺少微服务支持。

我们在把容器技术应用到大规模生产环境中时,依然会有众多的挑战。在生产环境中还需要考虑很多,比如,集群怎么管理,怎样更有效的调度来充分利用这些资源,怎样解决在这个集群中容器和容器互相的网络通信,不同应用对存储的需求等等。

 

Containers as a Service (CaaS  容器服务)

 


 

CaaS一方面提供容器化的环境,运行支撑环境来覆盖容器化应用的整个生命周期,从构建到交付到运维,它面对的目标用户不仅是开发者,也包括运维人员。在构建到交付阶段是持续集成和持续测试的能力,交付阶段一定是以容器的方式交付应用,在交付到运行阶段,也是使用容器化的方法进行应用的部署和运维。CaaS另一方面是以服务化的能力来提供Docker的运行支撑环境,对于企业客户来说,用户只需关心容器的应用自身即可,而整个应用支撑的环境是由云平台提供出来的。 

传统云计算金字塔中,PAAS层带来的简化性是以牺牲整个对环境控制的灵活性为代价的,导致PAAS平台的市场接受度很低。而Docker和CaaS的出现恰好填补了这个缺口,在PAAS领域进行了重新定位,实现了简洁性和灵活性间的完美平衡。 

CaaS的主要服务提供商既有谷歌、亚马逊以及Docker自身,也有国内的阿里云和很多其他的创业公司,每一家的CaaS都有自己的一些特色。

 

阿里云容器服务概念模型

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

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

集成容器和云服务

 


 

  1. 完全兼容 Docker Compose/Swarm
  2. 声明的方式支持容器及云服务
  3. 支持微服务架构 

阿里云容器服务

 


阿里云容器服务为图中中间部分,最底层为容器层,阿里云容器层可以支持不同云环境下的基础设施,包括公共云、专有云以及混合云,利用Docker自身很好的可移植性,可以实现无边界的云计算,除了Docker引擎外,我们更加关注存储和网络的不同需求,所有的支持我们都可以通过声明的方式利用起来,我们也支持第三方的扩展。在容器层之上是调度层,调度层的概念是如何在容器集群上使得容器和下面资源能更好的协作来完成一个应用栈需要的各种各样的能力。调度层之上还需要做更高层的抽象,没有人在乎容器,大家在乎的是自己的应用是怎样构建的,是怎么对外提供服务的,我们就提供了很好的对微服务架构的支持,支持服务的注册发现、弹性伸缩、灰度发布和不间断升级。 

有了这样的容器化平台,我们还可以对接现有的中间件服务和阿里云上的其它服务,以及集成CI/CD这样的三方工具,可以完整的支持软件的开发的过程。容器也不该成为企业IT治理的孤岛,它会与现有的IT流程、现有的IT平台的管控进行一个良好的集成。

跨主机容器网络


在云上搭建网络有其自己的特殊性,阿里云的跨主机容器网络有如下几个特性:

  • 每个容器在这个网络上都有一个独立IP
  • 容器跨宿主机直接通信
  • 容器网络可以通过DNS解析容器地址


微服务架构 

微服务就是把一个大而全的单体应用拆分成一组解耦的、自治的、协同工作的服务,这些服务通过标准化的借口互相通讯,每一个服务都是由一个团队单独的运维,它可以被独立的部署,每个服务的部署更新不会影响到其它的服务。

微服务在实际操作过程中会遇到种种问题,比如当应用拆分后,从运维一个服务变成运维多个服务,而这些服务又是被动态的分布在分布式环境里的,对这些服务进行管控、访问就变得比以前更加复杂。容器服务提供了两种弹性路由的方案,如下:

 


弹性Web路由方案1

我们可以为每一个容器服务取一个二级域名,让服务能够通过二级域名的方式进行访问。我们提供了一个分布式路由服务,它会根据发现服务里定义的各种各样的路由规则,去生成相应的HAProxy路由规则,当发生修改的时候能够动态的重新启动HAProxy,让规则生效。路由服务之上对接的是SLB,在SLB上只要绑定一个根域名,下面部署的各种各样的服务就可以通过二级域名的方式动态的接进来。

 


弹性Web路由方案2

有时候用户希望对SLB端有更灵活的配置,方案2就是利用声明式的机制让不同的容器服务挂载到不同的SLB上,发现服务里记录了整个集群上所有服务对外的路由的信息,Cluster Master会去侦听发现服务上整个路由的变化,并根据这些变化,自动的修改SLB后端的服务器配置。

实现无关的服务发现与负载均衡


只是利用DNS这样的发现机制是不够的,我们通过一种声明化的方法,能够让一个服务访问另外一个服务,和DNS服务发现相比:

  • 支持灵活的负载均衡策略
  • 避免TTL问题
  • 支持健康检查 

监控与AutoScaling

 


  1. 声明式方式定义弹性伸缩策略。
  2. 内置云监控集成。
  3. 提供插件机制支持开源、三方监控集成。

DevOps

DevOps最重要的有两点。一是“在一起”,开发和运维应该是一体化来考虑的过程,开发人员交付的产品必须是运维人员能够部署上线的东西。二是要有快速持续的反馈。 

利用容器实现持续集成和交付  Build Once and Deploy Everywhere


 

Docker可以在一处构建,就可以在各个地方部署。Docker镜像在开发中可以使用,可以在测试中使用,可以进行验证,可以进行上线,一切都是以Docker镜像为交付物的。此外,利用Compose模板,可以开发出部署的资源,标准化一致的在各个环境复用,以便进行持续的集成和部署。通过Docker镜像和Compose模板,可以把一个应用对外界的依赖,以及服务和服务之间的关联,全部变成可追踪的代码,这可以通过非常好的版本管理进行更好的管控,以便快速上线和回滚。

完整的容器化持续交付流程



 

未来发展趋势

最好的方式来编排Docker就是Docker自身。

Docker engine已经内置编排能力,更新后的Docker将具备以下四点特性:

  • Swarm mode
  • Cryptographic node identity
  • Service API
  • Built-in routing mesh

Docker Swarm 模式


Docker Swarm mode是由一组Docker engine构成,每个Docker engine都可能扮演两种角色中的一种,Manager和Worker。在一个集群上可以有多个Manager,多个Manager可以自己通过分布式的同步协议实现一个高可靠的State Store。

服务 Services


新的Docker提供了一个Services API。如果出现节点失败,在这个节点上的容器将会被自动迁移到其他节点之上。Docker Swarm mode采用状态逼近的模式,它定义了服务的期望状态,它会在运行过程中不断检查当前的状态是否和期望的状态保持一致,如果不一致,它就会自动修复。

Routing Mesh

 

在一个集群中,整个服务容器的部署是根据调度规则去进行动态调度的,任何一个服务的容器可能部署在集群中的任意一个节点上,新Docker提供了Routing Mesh的能力,其特性如下:

  • 每个服务一个VIP
  • IPVS实现负载均衡
  • 动态/手工分配PublishedPort
  • 每个worker参与路由 

Distributed Application Bundle Stack

 


一个DAB部署后就会生成一个相应的Stack,一个完整的应用栈。DAB实际是一个JSON文件,用与Docker compose类似的方式描述了一组服务,通过一个DAB就可以一键的通过一个deploy命令来生成一个相应的Docker Stack。

相关实践学习
使用ACS算力快速搭建生成式会话应用
阿里云容器计算服务 ACS(Container Compute Service)以Kubernetes为使用界面,采用Serverless形态提供弹性的算力资源,使您轻松高效运行容器应用。本文将指导您如何通过ACS控制台及ACS集群证书在ACS集群中快速部署并公开一个容器化生成式AI会话应用,并监控应用的运行情况。
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
3月前
|
Kubernetes Docker Python
Docker 与 Kubernetes 容器化部署核心技术及企业级应用实践全方案解析
本文详解Docker与Kubernetes容器化技术,涵盖概念原理、环境搭建、镜像构建、应用部署及监控扩展,助你掌握企业级容器化方案,提升应用开发与运维效率。
789 108
|
2月前
|
弹性计算 关系型数据库 微服务
基于 Docker 与 Kubernetes(K3s)的微服务:阿里云生产环境扩容实践
在微服务架构中,如何实现“稳定扩容”与“成本可控”是企业面临的核心挑战。本文结合 Python FastAPI 微服务实战,详解如何基于阿里云基础设施,利用 Docker 封装服务、K3s 实现容器编排,构建生产级微服务架构。内容涵盖容器构建、集群部署、自动扩缩容、可观测性等关键环节,适配阿里云资源特性与服务生态,助力企业打造低成本、高可靠、易扩展的微服务解决方案。
1615 9
|
2月前
|
人工智能 前端开发 Docker
从本地到云端:用 Docker Compose 与 Offload 构建可扩展 AI 智能体
在 AI 智能体开发中,开发者常面临本地调试与云端部署的矛盾。本文介绍如何通过 Docker Compose 与 Docker Offload 解决这一难题,实现从本地快速迭代到云端高效扩容的全流程。内容涵盖多服务协同、容器化配置、GPU 支持及实战案例,助你构建高效、一致的 AI 智能体开发环境。
329 1
从本地到云端:用 Docker Compose 与 Offload 构建可扩展 AI 智能体
|
4月前
|
存储 监控 测试技术
如何将现有的应用程序迁移到Docker容器中?
如何将现有的应用程序迁移到Docker容器中?
413 57
|
2月前
|
缓存 安全 Linux
优化Docker镜像大小的多阶段构建实践
优化Docker镜像大小的多阶段构建实践
276 99
|
1月前
|
监控 Kubernetes 安全
还没搞懂Docker? Docker容器技术实战指南 ! 从入门到企业级应用 !
蒋星熠Jaxonic,技术探索者,以代码为笔,在二进制星河中书写极客诗篇。专注Docker与容器化实践,分享从入门到企业级应用的深度经验,助力开发者乘风破浪,驶向云原生新世界。
还没搞懂Docker? Docker容器技术实战指南 ! 从入门到企业级应用 !
|
1月前
|
NoSQL 算法 Redis
【Docker】(3)学习Docker中 镜像与容器数据卷、映射关系!手把手带你安装 MySql主从同步 和 Redis三主三从集群!并且进行主从切换与扩容操作,还有分析 哈希分区 等知识点!
Union文件系统(UnionFS)是一种**分层、轻量级并且高性能的文件系统**,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtual filesystem) Union 文件系统是 Docker 镜像的基础。 镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。
336 6

相关产品

  • 容器计算服务
  • 容器服务Kubernetes版