首页 文章 精选 留言 我的

精选列表

搜索[Web安全],共10000篇文章
优秀的个人博客,低调大师

在 Docker 中运行一个 Python 的 Web 应用

几周前, Elastic Beanstalk声明在AWS云中配置和管理Docker容器。在本文中,我们通过一个简单的注册表单页面应用去理解Docker部署过程,该表单使用Elastic Beanstalk Python环境。 关于注册表单应用 几个月之前,我们就已经开发完这个应用并且发表在博客上。有4部分视频和一篇文章“Using DynamoDB and SNS with Elastic Beanstalk in any Supported AWS Region”。今天,我们将在这部分内容之上进一步的开发和讨论我们怎样部署在在Docker和Elastic Beanstalk环境中。本文将分成4个部分讲解。 Docker化阶段1:添加Dockerfile文件 首先从GitHub上克隆源代码: $> git clone git@github.com:awslabs/eb-py-flask-signup.git $> cd eb-py-flask-signup $> git checkout master 通过查看目录内容,知道这是一个简单的Python应用,使用Flask框架,Boto和一些其他的依赖(在requirements.txt中声明了该依赖),其中Boto用于DynamoDB和SNS的互动。 足够简单,以至于我们只需创建一个Dockerfile,构建一个适用于运行该应用的镜像。Dockerfile和其他应用源均放在目录中(即,和requirements.txt, application.py等等放在一块)。 FROM ubuntu:12.10 # Install Python Setuptools RUN apt-get install -y python-setuptools # Install pip RUN easy_install pip # Add and install Python modules ADD requirements.txt /src/requirements.txt RUN cd /src; pip install -r requirements.txt # Bundle app source ADD . /src # Expose EXPOSE 5000 # Run CMD ["python", "/src/application.py"] Docker化阶段 2 :在本地测试 虽然这个应用程序需要一个DynamoDB表和SNS主题来完成全部功能,不过我可以但没有测试它们: 首先, 构建 Docker 镜像: $> docker build -t eb-py-sample . 最后 (直接到可以使用后!),通过构建好的image运行一个container (映射 container 的5000端口到主机的8080端口, 并且按照下面的代码设置一些环境变量): $> docker run -d \ -e APP_CONFIG=application.config.example \ -e AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID \ -e AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY \ -p 8080:5000 \ eb-py-sample 在 OS X上,我打开 http://localhost:8080链接,下图显示的就是我的一个应用程序! 边栏:我们使用-e选项来传递一些选项: 1.APP_CONFIG: 这个程序使用这个选项加载(指向)它的配置文件. 默认我们指定一个默认的配置文件。 你可以创建一个 DynamoDB 表和SNS 主题并且将他们添加到这个配置文件中,以使你的应用程序在本地开发的时候可以更完美的工作。 2.AWS_ACCESS_KEY_ID 和 AWS_SECRET_ACCESS_KEY: 这个应用程序使用 Boto 来连接 DynamoDB 和SNS, 并且 Boto 使用这些环境变量来认证请求以上服务。这些设置仅仅是为了本地开发。 当我们向 Elastic Beanstalk 部署时将使用统一身份和访问控制方案(IAM) 角色(Roles)。 Docker 化阶段 3: 修改 .ebextensions 我们的应用程序拥有一个特殊的文件夹 .ebextensions,里面有个 setup.config 文件。我们使用这个文件通知来 Elastic Beanstalk 创建我们程序所需要的 DynamoDB 表和 SNS 主题, 同时他会创建一个配置文件 /var/app/app.config ,这个文件包含了我们刚才创建的 DynamoDB 表和 SNS 主题的名字。 这个文件中还有一些特殊的地方是他拥有特殊的在 Elastic Beanstalk(相对于 Docker)中的 Python的环境类型(python版本?) ,我们需要把他们移除掉: 修改 files 的成员,并且移除掉 owner 和 group 键,使他看起来像下面的这些: files: "/var/app/app.config": mode: "000444" content: | AWS_REGION = '`{ "Ref" : "AWS::Region"}`' STARTUP_SIGNUP_TABLE = '`{ "Ref" : "StartupSignupsTable"}`' NEW_SIGNUP_TOPIC = '`{ "Ref" : "NewSignupTopic"}`' 修改 option_settings ,删除静态文件映射。使他看起来像下面的这些: option_settings: "aws:elasticbeanstalk:customoption": "AlarmEmail" : "nobody@amazon.com" "aws:elasticbeanstalk:application:environment": "APP_CONFIG": "/var/app/app.config" "FLASK_DEBUG": "false" "THEME": "flatly" 检查一下setup.config文件,确认前面的所有变化是否正确,或者可以参考托管在在GitHub上的setup.config。 Docker化阶段4: 部署到Elastic Beanstalk 我已经建立并测试了我的本地容器,移除了一些.ebextensions,它是特定的Elastic Beanstalk Python环境,我已经信心满满地准备部署它了! 我创建了一个文件,名字叫做Dockerrun.aws.json,与此类似,我创建了Dockerfile。这个文件将会告诉Elastic Beanstalk 怎么去运行Docker容器并且它看起来像是这样的(这个文件的详细信息,请参阅下方)。 { "AWSEBDockerrunVersion": "1", "Volumes": [ { "ContainerDirectory": "/var/app", "HostDirectory": "/var/app" } ], "Logging": "/var/eb_log" } 关于Dockerrun.aws.json Volumes成员将会在EC2上映射/var/app实例到容器上的/var/app。Docker容器通过访问app.config文件并通过创建.ebextensions/setup.config得以让app在容器上运行。Logging成员告诉Elastic Beanstalk我们的Docker app将会记录日志到/var/eb_log到容器中。在控制台里,无论什么时候你点击Snapshot Logs或者如果你启用自动日志轮转,Beanstalk将会自动推送日志/var/eb_log到这个目录。 我将提交我的修改,并且使用 git archive 来生成一个zip文件以便部署到Elastic Beanstalk上(你可以使用zip工具、Finder或Windows 资源管理器来打包): $> git add Docker* && git commit -am "Dockerized" $> git archive --format=zip HEAD > eb-py-flask-signup.zip 之后,我通过 Elastic Beanstalk Management Console 来部署生成后的zip包 当我的环境通过之后,我可以访问它,确保它可以正常工作: 我还保存了环境日志的快照: 由于我之前往Dockerrun.aws.json文件中添加了Logging 成员,所以,容器中输出到/var/eb_log中的日志可以被定向到S3,并且我可以在浏览器中访问它们:

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册