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

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
简介: 我们曾经在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的方式访问到容器化的服务,为用户节省了大量的工作。

相关实践学习
巧用云服务器ECS制作节日贺卡
本场景带您体验如何在一台CentOS 7操作系统的ECS实例上,通过搭建web服务器,上传源码到web容器,制作节日贺卡网页。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
相关文章
|
7天前
|
运维 开发者 Docker
Docker Compose:简化容器化应用的部署与管理
Docker Compose:简化容器化应用的部署与管理
|
21天前
|
数据处理 Apache 数据库
将 Python UDF 部署到 Apache IoTDB 的详细步骤与注意事项
【10月更文挑战第21天】将 Python UDF 部署到 Apache IoTDB 中需要一系列的步骤和注意事项。通过仔细的准备、正确的部署和测试,你可以成功地将自定义的 Python UDF 应用到 Apache IoTDB 中,为数据处理和分析提供更灵活和强大的支持。在实际操作过程中,要根据具体情况进行调整和优化,以确保实现最佳的效果。还可以结合具体的代码示例和实际部署经验,进一步深入了解和掌握这一过程。
20 2
|
23天前
|
机器人 Shell Linux
【Azure Bot Service】部署Python ChatBot代码到App Service中
本文介绍了使用Python编写的ChatBot在部署到Azure App Service时遇到的问题及解决方案。主要问题是应用启动失败,错误信息为“Failed to find attribute 'app' in 'app'”。解决步骤包括:1) 修改`app.py`文件,添加`init_func`函数;2) 配置`config.py`,添加与Azure Bot Service认证相关的配置项;3) 设置App Service的启动命令为`python3 -m aiohttp.web -H 0.0.0.0 -P 8000 app:init_func`。
|
27天前
|
人工智能 专有云 Serverless
亚太唯一!阿里云再度入选Gartner®容器管理魔力象限领导者
亚太唯一!阿里云再度入选Gartner®容器管理魔力象限领导者
104 2
|
28天前
|
Linux Python
【Azure Function】Python Function部署到Azure后报错No module named '_cffi_backend'
ERROR: Error: No module named '_cffi_backend', Cannot find module. Please check the requirements.txt file for the missing module.
|
7天前
|
前端开发 开发者 Docker
深入探索Docker Compose:简化多容器应用的部署
深入探索Docker Compose:简化多容器应用的部署
27 0
|
30天前
|
弹性计算 Kubernetes 网络协议
阿里云弹性网络接口技术的容器网络基础教程
阿里云弹性网络接口技术的容器网络基础教程
阿里云弹性网络接口技术的容器网络基础教程
|
28天前
|
运维 Kubernetes 监控
掌握Docker容器化技术:构建、部署与管理的高效实践
【10月更文挑战第14天】掌握Docker容器化技术:构建、部署与管理的高效实践
39 0
|
域名解析 网络协议 Linux
Python实现阿里云域名DDNS支持ipv4和ipv6
Python实现阿里云域名DDNS支持ipv4和ipv6
22138 5
Python实现阿里云域名DDNS支持ipv4和ipv6
|
3天前
|
机器学习/深度学习 人工智能 TensorFlow
人工智能浪潮下的自我修养:从Python编程入门到深度学习实践
【10月更文挑战第39天】本文旨在为初学者提供一条清晰的道路,从Python基础语法的掌握到深度学习领域的探索。我们将通过简明扼要的语言和实际代码示例,引导读者逐步构建起对人工智能技术的理解和应用能力。文章不仅涵盖Python编程的基础,还将深入探讨深度学习的核心概念、工具和实战技巧,帮助读者在AI的浪潮中找到自己的位置。

相关产品

  • 容器计算服务