前言
我们曾经在Python程序容器化(一)中介绍了如何将一个克隆版Twitter程序(retwit-py)容器化,并使用docker-compose运行于宿主机上。对于经典的Web程序,处理前端请求的Web服务通常都是可扩展伸缩的。生产环境中,随着访问量的不断增长,需要部署多个Web服务实例,并通过负载均衡统一对外进行服务。本文将会介绍如何使用阿里云容器服务将retwit-py改造为贴近生产环境的系统并部署。
阿里云容器服务
容器服务是一项高性能可扩展的容器管理服务,支持在一组阿里云云服务器上通过 Docker容器来部署或编排应用。用户不再需要安装、运维、扩展自己的集群管理基础设施,而是可以直接通过阿里云控制台图形化界面或API进行容器操作和生命周期管理。容器服务整合了阿里云负载均衡SLB、专有网络 VPC等云产品,为云应用部署与运维场景提供丰富的一站式功能支持。
服务改造
我们计划部署3个Web服务实例和1个DB服务实例,为了提高整体服务的可靠性,我们首先建立一个包含了3台虚拟机的集群python-demo。
准备镜像
在上篇文章中,我们通过Dockerfile构建了retwis-py的镜像,使用docker命令查看镜像列表:
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
retwis-py latest eba6c2652c0a 2 hours ago 682.7 MB
redis 3.0 9afdbcd3766e 3 days ago 151.3 MB
registry.aliyuncs.com/acs/routing 0.5 40cd035735ea 5 days ago 217.8 MB
registry.aliyuncs.com/acs/agent 0.5-477bce1 32247750d584 5 days ago 27.39 MB
registry.aliyuncs.com/acs-sample/python 2.7 0e45459a5626 13 days ago 675.7 MB
registry.aliyuncs.com/acs/tunnel-agent 0.21 7b6077b610be 11 weeks ago 8.771 MB
我们需要将构建的retwis-py镜像push到docker registry上。你可以将镜像push到docker hub上,也可以使用阿里云提供的registry服务以避免网络原因造成的docker镜像下载失败。关于使用阿里云Registry服务的文档请参考文档
阿里云容器镜像服务支持从github自动编译镜像,但本文选择手动上传镜像的方式,将本地构建好的镜像retwis-py推送到阿里云的Registry上:
$ docker tag eba6c2652c0a registry.aliyuncs.com/acs-sample/retwis-py:latest
$ docker push registry.aliyuncs.com/acs-sample/retwis-py
使用阿里云容器服务
我们首先在容器服务页面创建一个编排模版,阿里云编排模版格式是基于Docker Compose的YAML格式,并在此基础上加入阿里云容器服务特有的一些扩展。Python镜像构建Web server镜像,Dockerfile如下所示:
web:
image: registry.aliyuncs.com/acs-sample/retwis-py
command: python app.py
ports:
- "8080"
links:
- db:redis
restart: always
labels:
aliyun.scale: '3'
aliyun.routing.port_8080: 'http://retwis-py'
db:
image: redis:3.0
restart: always
与上篇文章中的docker-compose.yml文件相比,多了labels定义:
aliyun.scale: '3'
"aliyun.scale" 指定了部署实例的个数。
aliyun.routing.port_8080: 'http://retwis-py'
“aliyun.routing.port_8080“ 配置了路由服务,将用户的域名和容器8080端口绑定到一起。
在阿里云容器服务中,每个集群都有一个SLB服务对外提供Web服务。用户需要将指定的域名绑定到容器集群的SLB实例的IP即可,同时还提供了一个测试域名供用户使用。
创建应用
容器服务页面选择“应用“-“创建应用“,创建一个新的应用(例如:retwis-py-demo),并选择要部署的集群(例如:python-demo),“使用编排模版创建“进入下一步。
可以选择“使用已有编排模版“加载刚刚编辑的docker-compose文件,或者直接编辑。
点击“创建并部署“后,完成服务的创建。
查看应用
成功部署后,可以在应用页面查看其状态
然后从详情里面可以看到测试域名为: http://retwis-py.c8d0e9e2d767249baa2ff87a513f7aa4e.cn-beijing.alicontainer.com 打开浏览器访问这个地址就可以看到熟悉的Home界面了。
总结
使用阿里云的容器服务可以非常简单地将一个复杂的Web服务部署运行起来,而所需的工作只是使用阿里云的docker compose的扩展label对原有docker compose YAML文件进行简单改造。同时,阿里云容器服务还提供的Web应用的弹性路由服务,是用户可以非常简单地在外部通过域名或VIP的方式访问到容器化的服务,为用户节省了大量的工作。