Python应用容器化(二)----使用阿里云容器服务部署应用-阿里云开发者社区

开发者社区> 开发与运维> 正文

Python应用容器化(二)----使用阿里云容器服务部署应用

简介: 我们曾经在Python程序容器化(一)中介绍了如何将一个克隆版Twitter程序(retwit-py)容器化,并使用docker-compose运行于宿主机上。对于经典的Web程序,处理前端请求的Web服务通常都是可扩展伸缩的。生产环境中,随着访问量的不断增长,需要部署多个Web服务实例,并通过负载

前言

我们曾经在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),“使用编排模版创建“进入下一步。
Screen_Shot_2016_02_28_at_3_19_55_PM

可以选择“使用已有编排模版“加载刚刚编辑的docker-compose文件,或者直接编辑。
Screen_Shot_2016_02_28_at_3_26_21_PM

点击“创建并部署“后,完成服务的创建。
Screen_Shot_2016_02_28_at_3_26_44_PM

查看应用

成功部署后,可以在应用页面查看其状态
Screen_Shot_2016_02_28_at_3_34_45_PM

然后从详情里面可以看到测试域名为: http://retwis-py.c8d0e9e2d767249baa2ff87a513f7aa4e.cn-beijing.alicontainer.com 打开浏览器访问这个地址就可以看到熟悉的Home界面了。
Screen_Shot_2016_02_28_at_3_35_23_PM

总结

使用阿里云的容器服务可以非常简单地将一个复杂的Web服务部署运行起来,而所需的工作只是使用阿里云的docker compose的扩展label对原有docker compose YAML文件进行简单改造。同时,阿里云容器服务还提供的Web应用的弹性路由服务,是用户可以非常简单地在外部通过域名或VIP的方式访问到容器化的服务,为用户节省了大量的工作。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
开发与运维
使用钉钉扫一扫加入圈子
+ 订阅

集结各类场景实战经验,助你开发运维畅行无忧

其他文章