时间:2021-05-22
几周前, 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个部分讲解。
参考资源
原始的Python应用(非Docker化)源代码托管在GitHub上(master版本),网址为https://github.com/awslabs/eb-py-flask-signup/tree/docker。Docker化的版本在docker版本中,网址为:https://github.com/awslabs/eb-py-flask-signup/tree/docker
如果你喜欢代码和不同版本间的比对,你可利用GitHub对比功能查看两个版本的区别。网址为https://github.com/awslabs/eb-py-flask-signup/compare/master...docker。你也可以查看Docker化后添加的每个文件或者每行代码。
Docker化阶段1:添加Dockerfile文件
首先从GitHub上克隆源代码:
通过查看目录内容,知道这是一个简单的Python应用,使用Flask框架,Boto和一些其他的依赖(在requirements.txt中声明了该依赖),其中Boto用于DynamoDB和SNS的互动。
足够简单,以至于我们只需创建一个Dockerfile,构建一个适用于运行该应用的镜像。Dockerfile和其他应用源均放在目录中(即,和requirements.txt, application.py等等放在一块)。
Docker化阶段 2 :在本地测试
虽然这个应用程序需要一个DynamoDB表和SNS主题来完成全部功能,不过我可以但没有测试它们:
首先, 构建 Docker 镜像:
最后 (直接到可以使用后!),通过构建好的image运行一个container (映射 container 的5000端口到主机的8080端口, 并且按照下面的代码设置一些环境变量):
在 OS X上,我打开 http://localhost:8080链接,下图显示的就是我的一个应用程序!
复制代码 代码如下: 边栏:我们使用-e选项来传递一些选项:
Docker 化阶段 3: 修改 .ebextensions
我们的应用程序拥有一个特殊的文件夹 .ebextensions,里面有个 setup.config 文件。我们使用这个文件通知来 Elastic Beanstalk 创建我们程序所需要的 DynamoDB 表和 SNS 主题, 同时他会创建一个配置文件 /var/app/app.config ,这个文件包含了我们刚才创建的 DynamoDB 表和 SNS 主题的名字。
这个文件中还有一些特殊的地方是他拥有特殊的在 Elastic Beanstalk(相对于 Docker)中的 Python的环境类型(python版本?) ,我们需要把他们移除掉:
修改 files 的成员,并且移除掉 owner 和 group 键,使他看起来像下面的这些:
修改 option_settings ,删除静态文件映射。使他看起来像下面的这些:
检查一下setup.config文件,确认前面的所有变化是否正确,或者可以参考托管在在GitHub上的setup.config。
Docker化阶段4: 部署到Elastic Beanstalk
我已经建立并测试了我的本地容器,移除了一些.ebextensions,它是特定的Elastic Beanstalk Python环境,我已经信心满满地准备部署它了!
我创建了一个文件,名字叫做Dockerrun.aws.json,与此类似,我创建了Dockerfile。这个文件将会告诉Elastic Beanstalk 怎么去运行Docker容器并且它看起来像是这样的(这个文件的详细信息,请参阅下方)。
关于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 资源管理器来打包):
之后,我通过 Elastic Beanstalk Management Console 来部署生成后的zip包
当我的环境通过之后,我可以访问它,确保它可以正常工作:
我还保存了环境日志的快照:
由于我之前往Dockerrun.aws.json文件中添加了Logging 成员,所以,容器中输出到/var/eb_log中的日志可以被定向到S3,并且我可以在浏览器中访问它们:
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
docker概述docker是一个开源的软件部署解决方案;docker也是轻量级的应用容器框架;docker可以打包、发布、运行任何的应用,这个也是docker
现在大部分项目已经开始部署在docker上面了,可是部署环节还是有点麻烦,所以本文想讲解一下如何使用idea一键部署。docker配置修改配置文件?123456
首先了解一下Docker是什么?Docker是一个容器引擎,可以用来部署应用。通过Docker,可以实现快速交付,测试和部署代码,可移植性强。Docker主要包
本文介绍了使用Docker搭建Django,Nginx,R,Python部署环境的方法,分享给大家,具体如下:基本环境:Ubuntu16.10docker17.
近2年Docker非常的火热,各位开发者恨不得把所有的应用、软件都部署在Docker容器中,但是您确定也要把数据库也部署的容器中吗?这个问题不是子虚乌有,因为在