G O P S 2016 全 球 运 维 大 会 · 深 圳 站
G O P S 2016 全 球 运 维 大 会 · 深 圳 站
云端基于Docker的微服务与持续交付实践
易立,阿里巴巴
云栖社区专家
G O P S 2016 全 球 运 维 大 会 · 深 圳 站
日程
•  Docker与微服务
•  云端生产环境部署
•  应用Docker化改造
•  持续交付流程实践
G O P S 2016 全 球 运 维 大 会 · 深 圳 站
交付方式变革改变了全球经济格局
Docker 改变软件交付方式
“没有集装箱,不可能有全球化。”——《经济学家》
G O P S 2016 全 球 运 维 大 会 · 深 圳 站
Docker in Alibaba
•  支付宝,淘宝的应用运维Docker化
•  阿里百川 TAE
•  阿里云容器服务
•  高性能计算 HPC
•  …
G O P S 2016 全 球 运 维 大 会 · 深 圳 站
加速应用交付,缩短梦想距离
物理服务器、
存储、网络
整体式应用
(monolithic app)
缓慢变化
微服务
快速演化
云计算
传统IT系统 今天
Dev vs. Ops DevOps
大兵团作战 战术小队
G O P S 2016 全 球 运 维 大 会 · 深 圳 站
Docker 与虚拟化技术
•  Docker是一种轻量级的操作系统虚拟化方案
–  细粒度资源隔离 - 敏捷,降低企业成本
–  定义了环境无关的标准的交付、部署规范 - 良好可移植性,提高运维效率
•  结合Docker容器和虚拟化技术
–  利用虚拟机提供弹性基础架构,更好的安全隔离,动态热迁移
–  利用容器技术实现简化应用部署、运维;实现弹性应用架构
VMs
App A App B1 App B2
Bins & Libs Bins & Libs Bins & Libs
Guest OS
(RHEL)
Guest OS
(Ubuntu)
Guest OS
(CentOS)
Hypervisor
Server HW
Containers
App A App B1 App B2
Bins & Libs Bins & Libs
Operating System
Server HW
Docker容器方式
Docker Engine
Hypervisor
G O P S 2016 全 球 运 维 大 会 · 深 圳 站
Cloud Native Computing
Microservice
Docker DevOps
•  定义
–  微服务应用
–  容器化交付
–  DevOps
–  动态管理
•  挑战
–  服务发现、路由
–  服务监控
–  服务生命周期管理
–  自动化运维
G O P S 2016 全 球 运 维 大 会 · 深 圳 站
Docker Machine
图片
阿里云对容器社区的支持
云端漫步:开始 Docker 之旅
•  配置安装
–  安装Docker Toolkit
–  安装云驱动
•  Aliyun ECS driver for Docker Machine
•  AWS, GCE, 等等.
•  在创建Docker运行环境
export	ECS_ACCESS_KEY_ID=xxxxxx	
export	ECS_ACCESS_KEY_SECRET=xxxxxx	
docker-machine	create	–driver	aliyunecs	mytest	
eval	"$(docker-machine	env	mytest)"	
docker	run	-d	nginx
G O P S 2016 全 球 运 维 大 会 · 深 圳 站
生产环境中使用Docker
您还需要:
集群管理
网络
存储
调度
编排
…
图⽚来源 http://www.popularmechanics.com/home/how-to/g172/shipping-container-homes-460309/
G O P S 2016 全 球 运 维 大 会 · 深 圳 站
容器即服务 Container as a Service
Docker	Cloud	
(tutum.co)	
	
Docker	Swarm	API	
Compose	template	
Amazon	EC2	
Container	Service	
	
ECS	API	
Compose	template/
Task	definiKon	
Google	
Container	Engine	
	
Kubernetes	API	
Pod/Service	
	
	
Docker	Swarm	API	
Compose	template	
等等
G O P S 2016 全 球 运 维 大 会 · 深 圳 站
容器集群管理 - Docker Swarm
•  优点
–  支持标准的 Docker API
–  灵活、可插拔的容器调度
•  不足
–  面向容器、缺少微服务支持
G O P S 2016 全 球 运 维 大 会 · 深 圳 站
容器编排 - Docker Compose
•  优点
–  简单好用,便于开发
–  编排容器、存储和网
络
•  不足
–  面向开发和部署,不
支持自动化运维
version: '2'
services:
wordpress:
image: wordpress:4
ports:
- 80
restart: always
links:
- db:mysql
network_mode: bridge
db:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: password
restart: always
volumes:
- data:/var/log/mysql
network_mode: bridge
volumes:
data:
driver: local
wordpress	 db	
mysql	
容器	 容器	
data	
volume	
docker-compose up
:docker-compose scale wordpress=3
G O P S 2016 全 球 运 维 大 会 · 深 圳 站
阿里云容器服务
DockerDocker
/VPC
MySQL,,
Mongo …
CI/CD
G O P S 2016 全 球 运 维 大 会 · 深 圳 站
什么应用可以运行在容器中
	
	
	
	
	
Web	 	
REST	API	
CI/CD 	
	
	
Stateful	
Long-Life	
	
	
Stateless	
Short-Life
G O P S 2016 全 球 运 维 大 会 · 深 圳 站
Docker化应用实战: Ghost 博客
ghost:
image: ghost:0.7
ports:
- "2368:2368”
restart: always
	
	
-  	
- 
G O P S 2016 全 球 运 维 大 会 · 深 圳 站
Ghost 博客 – 高可用集群 1
ghost:
image: acs-sample/ghost:0.7
links:
- db:mysql
ports:
- "2368”
labels:
aliyun.scale: '3'
aliyun.routing.port_2368: 'http://
myblog'
restart: always
db:
image: acs-sample/mysql:5.6
environment:
- MYSQL_ROOT_PASSWORD=example
- MYSQL_DATABASE=ghost
- MYSQL_USER=ghost
- MYSQL_PASSWORD=ghost_db_password
restart: always
-  引入负载均衡
-  Ghost容器使用共享数据库
-  数据库容器适合开发,不适合生产环境
rouKng	
MySQL
G O P S 2016 全 球 运 维 大 会 · 深 圳 站
Ghost 博客 – 高可用集群2
ghost: !
image: acs-sample/ghost:0.7!
links: !
- db:mysql !
ports: !
- "2368"!
environment:!
- GHOST_URL=http://my-ghost-
blog.com!
labels:!
aliyun.scale: '3'!
restart: always !
db: !
external: !
host:
rds******.mysql.rds.aliyuncs.com!
ports:!
- 3306!
environment: !
- MYSQL_DATABASE=blog!
- MYSQL_USER=ghost!
- MYSQL_PASSWORD=***********!
-  使用Database as a Service或已有数据库
-  平衡过渡
rouKng	
	 		
MySQL
G O P S 2016 全 球 运 维 大 会 · 深 圳 站
Ghost 博客 – 高可用集群3
•  利用Docker Volume Plugin
支持不同的存储类型
–  块存储
–  对象存储
–  网络文件系统
•  支持第三方存储插件
•  注:Docker Engine的缺陷
rouKng	
OSSFS	 OSSFS	OSSFS	
MySQL
容器化持续集成和交付:Build Once and Deploy Everywhere
Dockerfiles 或
Docker
Compose模板
Pull
Push
Pull Pull Pull
利用Docker镜像实现软件交付
Container-as-a-Service
无缝上云
在开发、测试和生产环境中保证应用的一致性
支持版本管理
快速上线和回滚
本地开发
环境
G O P S 2016 全 球 运 维 大 会 · 深 圳 站
简化的持续交付流程
Web hook Web hook
Docker Compose
Docker
G O P S 2016 全 球 运 维 大 会 · 深 圳 站
	
管理	 CI	Server	
阿里云镜
像服务
CD	Server	
	
开发者
如果构建和UT 	
	
	
	
Push	
Docker镜像和Compose
模板用于集成、测试和部署
完整的持续交付流程
	
Webhook	通知	
	
阿里持续交付平台
G O P S 2016 全 球 运 维 大 会 · 深 圳 站
不可变架构(immutable infrastructure)
•  利用不可变性来运维基础架构: 一旦实例化后,永不改变;只会用
另外的一个实例正确的取代它
•  优点
–  避免环境间的不一致
–  简化部署复杂度
–  低成本回滚
V.S.	
	Pet	 牛群	CaZle
G O P S 2016 全 球 运 维 大 会 · 深 圳 站
Docker:不可变架构梦想成真
•  当您想把Docker容器当做轻量级虚拟机时, 请三思!
•  正确姿势
–  每次代码提交重新构建镜像
–  尽量利用Dockerfile自动构建镜像
•  避免手工修改运行中的容器并提交为镜像
–  尽量不要使用latest作为镜像标签
•  Tips: 利用Git Commit作为镜像tag一部分,便于追踪
–  利用volume保存持久化数据
•  应用和数据分类
唯一不变的就是变
化;不可变架构就
是为了更快的变化
G O P S 2016 全 球 运 维 大 会 · 深 圳 站
跨主机容器网络 – 云端实践
Docker 原生Overlay网络 (VXLAN)
node1	
default	bridge	
c1	 c2	 c3	
default	bridge	
c4	 c5	 c6	
default	bridge	
c7	 c8	 c9	
overlay	
node2	 node3	
VSwitch	 VSwitch	
VRouter	
利用VPC网络方案
VPC	
default	bridge	
c1	 c2	 c3	
eth0	
default	bridge	
c4	 c5	 c6	
eth0	
default	bridge	
c7	 c8	 c9	
eth0	
node1	 node2	 node3	
路由	
	
192.168.100.1	 192.168.100.2	 192.168.100.3	
172.18.1.1/24	 172.18.2.1/24	 172.18.3.1/24	
eth0	 eth0	 eth0	
172.18.1.0/24	>	node1	
172.18.2.0/24	>	node2	
172.18.3.0/24	>	node3	
…
G O P S 2016 全 球 运 维 大 会 · 深 圳 站
谢谢
云栖社区阿里云容器服务团队博客
https://yq.aliyun.com/teams/11

Gops2016 云端基于Docker的微服务与持续交付实践

  • 1.
    G O PS 2016 全 球 运 维 大 会 · 深 圳 站
  • 2.
    G O PS 2016 全 球 运 维 大 会 · 深 圳 站 云端基于Docker的微服务与持续交付实践 易立,阿里巴巴 云栖社区专家
  • 3.
    G O PS 2016 全 球 运 维 大 会 · 深 圳 站 日程 •  Docker与微服务 •  云端生产环境部署 •  应用Docker化改造 •  持续交付流程实践
  • 4.
    G O PS 2016 全 球 运 维 大 会 · 深 圳 站 交付方式变革改变了全球经济格局 Docker 改变软件交付方式 “没有集装箱,不可能有全球化。”——《经济学家》
  • 5.
    G O PS 2016 全 球 运 维 大 会 · 深 圳 站 Docker in Alibaba •  支付宝,淘宝的应用运维Docker化 •  阿里百川 TAE •  阿里云容器服务 •  高性能计算 HPC •  …
  • 6.
    G O PS 2016 全 球 运 维 大 会 · 深 圳 站 加速应用交付,缩短梦想距离 物理服务器、 存储、网络 整体式应用 (monolithic app) 缓慢变化 微服务 快速演化 云计算 传统IT系统 今天 Dev vs. Ops DevOps 大兵团作战 战术小队
  • 7.
    G O PS 2016 全 球 运 维 大 会 · 深 圳 站 Docker 与虚拟化技术 •  Docker是一种轻量级的操作系统虚拟化方案 –  细粒度资源隔离 - 敏捷,降低企业成本 –  定义了环境无关的标准的交付、部署规范 - 良好可移植性,提高运维效率 •  结合Docker容器和虚拟化技术 –  利用虚拟机提供弹性基础架构,更好的安全隔离,动态热迁移 –  利用容器技术实现简化应用部署、运维;实现弹性应用架构 VMs App A App B1 App B2 Bins & Libs Bins & Libs Bins & Libs Guest OS (RHEL) Guest OS (Ubuntu) Guest OS (CentOS) Hypervisor Server HW Containers App A App B1 App B2 Bins & Libs Bins & Libs Operating System Server HW Docker容器方式 Docker Engine Hypervisor
  • 8.
    G O PS 2016 全 球 运 维 大 会 · 深 圳 站 Cloud Native Computing Microservice Docker DevOps •  定义 –  微服务应用 –  容器化交付 –  DevOps –  动态管理 •  挑战 –  服务发现、路由 –  服务监控 –  服务生命周期管理 –  自动化运维
  • 9.
    G O PS 2016 全 球 运 维 大 会 · 深 圳 站 Docker Machine 图片 阿里云对容器社区的支持 云端漫步:开始 Docker 之旅 •  配置安装 –  安装Docker Toolkit –  安装云驱动 •  Aliyun ECS driver for Docker Machine •  AWS, GCE, 等等. •  在创建Docker运行环境 export ECS_ACCESS_KEY_ID=xxxxxx export ECS_ACCESS_KEY_SECRET=xxxxxx docker-machine create –driver aliyunecs mytest eval "$(docker-machine env mytest)" docker run -d nginx
  • 10.
    G O PS 2016 全 球 运 维 大 会 · 深 圳 站 生产环境中使用Docker 您还需要: 集群管理 网络 存储 调度 编排 … 图⽚来源 http://www.popularmechanics.com/home/how-to/g172/shipping-container-homes-460309/
  • 11.
    G O PS 2016 全 球 运 维 大 会 · 深 圳 站 容器即服务 Container as a Service Docker Cloud (tutum.co) Docker Swarm API Compose template Amazon EC2 Container Service ECS API Compose template/ Task definiKon Google Container Engine Kubernetes API Pod/Service Docker Swarm API Compose template 等等
  • 12.
    G O PS 2016 全 球 运 维 大 会 · 深 圳 站 容器集群管理 - Docker Swarm •  优点 –  支持标准的 Docker API –  灵活、可插拔的容器调度 •  不足 –  面向容器、缺少微服务支持
  • 13.
    G O PS 2016 全 球 运 维 大 会 · 深 圳 站 容器编排 - Docker Compose •  优点 –  简单好用,便于开发 –  编排容器、存储和网 络 •  不足 –  面向开发和部署,不 支持自动化运维 version: '2' services: wordpress: image: wordpress:4 ports: - 80 restart: always links: - db:mysql network_mode: bridge db: image: mysql:5.7 environment: MYSQL_ROOT_PASSWORD: password restart: always volumes: - data:/var/log/mysql network_mode: bridge volumes: data: driver: local wordpress db mysql 容器 容器 data volume docker-compose up :docker-compose scale wordpress=3
  • 14.
    G O PS 2016 全 球 运 维 大 会 · 深 圳 站 阿里云容器服务 DockerDocker /VPC MySQL,, Mongo … CI/CD
  • 15.
    G O PS 2016 全 球 运 维 大 会 · 深 圳 站 什么应用可以运行在容器中 Web REST API CI/CD Stateful Long-Life Stateless Short-Life
  • 16.
    G O PS 2016 全 球 运 维 大 会 · 深 圳 站 Docker化应用实战: Ghost 博客 ghost: image: ghost:0.7 ports: - "2368:2368” restart: always -  - 
  • 17.
    G O PS 2016 全 球 运 维 大 会 · 深 圳 站 Ghost 博客 – 高可用集群 1 ghost: image: acs-sample/ghost:0.7 links: - db:mysql ports: - "2368” labels: aliyun.scale: '3' aliyun.routing.port_2368: 'http:// myblog' restart: always db: image: acs-sample/mysql:5.6 environment: - MYSQL_ROOT_PASSWORD=example - MYSQL_DATABASE=ghost - MYSQL_USER=ghost - MYSQL_PASSWORD=ghost_db_password restart: always -  引入负载均衡 -  Ghost容器使用共享数据库 -  数据库容器适合开发,不适合生产环境 rouKng MySQL
  • 18.
    G O PS 2016 全 球 运 维 大 会 · 深 圳 站 Ghost 博客 – 高可用集群2 ghost: ! image: acs-sample/ghost:0.7! links: ! - db:mysql ! ports: ! - "2368"! environment:! - GHOST_URL=http://my-ghost- blog.com! labels:! aliyun.scale: '3'! restart: always ! db: ! external: ! host: rds******.mysql.rds.aliyuncs.com! ports:! - 3306! environment: ! - MYSQL_DATABASE=blog! - MYSQL_USER=ghost! - MYSQL_PASSWORD=***********! -  使用Database as a Service或已有数据库 -  平衡过渡 rouKng MySQL
  • 19.
    G O PS 2016 全 球 运 维 大 会 · 深 圳 站 Ghost 博客 – 高可用集群3 •  利用Docker Volume Plugin 支持不同的存储类型 –  块存储 –  对象存储 –  网络文件系统 •  支持第三方存储插件 •  注:Docker Engine的缺陷 rouKng OSSFS OSSFS OSSFS MySQL
  • 20.
    容器化持续集成和交付:Build Once andDeploy Everywhere Dockerfiles 或 Docker Compose模板 Pull Push Pull Pull Pull 利用Docker镜像实现软件交付 Container-as-a-Service 无缝上云 在开发、测试和生产环境中保证应用的一致性 支持版本管理 快速上线和回滚 本地开发 环境
  • 21.
    G O PS 2016 全 球 运 维 大 会 · 深 圳 站 简化的持续交付流程 Web hook Web hook Docker Compose Docker
  • 22.
    G O PS 2016 全 球 运 维 大 会 · 深 圳 站 管理 CI Server 阿里云镜 像服务 CD Server 开发者 如果构建和UT Push Docker镜像和Compose 模板用于集成、测试和部署 完整的持续交付流程 Webhook 通知 阿里持续交付平台
  • 23.
    G O PS 2016 全 球 运 维 大 会 · 深 圳 站 不可变架构(immutable infrastructure) •  利用不可变性来运维基础架构: 一旦实例化后,永不改变;只会用 另外的一个实例正确的取代它 •  优点 –  避免环境间的不一致 –  简化部署复杂度 –  低成本回滚 V.S. Pet 牛群 CaZle
  • 24.
    G O PS 2016 全 球 运 维 大 会 · 深 圳 站 Docker:不可变架构梦想成真 •  当您想把Docker容器当做轻量级虚拟机时, 请三思! •  正确姿势 –  每次代码提交重新构建镜像 –  尽量利用Dockerfile自动构建镜像 •  避免手工修改运行中的容器并提交为镜像 –  尽量不要使用latest作为镜像标签 •  Tips: 利用Git Commit作为镜像tag一部分,便于追踪 –  利用volume保存持久化数据 •  应用和数据分类 唯一不变的就是变 化;不可变架构就 是为了更快的变化
  • 25.
    G O PS 2016 全 球 运 维 大 会 · 深 圳 站 跨主机容器网络 – 云端实践 Docker 原生Overlay网络 (VXLAN) node1 default bridge c1 c2 c3 default bridge c4 c5 c6 default bridge c7 c8 c9 overlay node2 node3 VSwitch VSwitch VRouter 利用VPC网络方案 VPC default bridge c1 c2 c3 eth0 default bridge c4 c5 c6 eth0 default bridge c7 c8 c9 eth0 node1 node2 node3 路由 192.168.100.1 192.168.100.2 192.168.100.3 172.18.1.1/24 172.18.2.1/24 172.18.3.1/24 eth0 eth0 eth0 172.18.1.0/24 > node1 172.18.2.0/24 > node2 172.18.3.0/24 > node3 …
  • 26.
    G O PS 2016 全 球 运 维 大 会 · 深 圳 站 谢谢 云栖社区阿里云容器服务团队博客 https://yq.aliyun.com/teams/11