日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
在Docker中運行一個Python的Web應(yīng)用

幾周前, Elastic Beanstalk聲明在AWS云中配置和管理Docker容器。在本文中,我們通過一個簡單的注冊表單頁面應(yīng)用去理解Docker部署過程,該表單使用Elastic Beanstalk Python環(huán)境。

網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)公司!專注于網(wǎng)頁設(shè)計、網(wǎng)站建設(shè)、微信開發(fā)、小程序制作、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了西塞山免費建站歡迎大家使用!

關(guān)于注冊表單應(yīng)用

幾個月之前,我們就已經(jīng)開發(fā)完這個應(yīng)用并且發(fā)表在博客上。有4部分視頻和一篇文章“Using DynamoDB and SNS with Elastic Beanstalk in any Supported AWS Region”。今天,我們將在這部分內(nèi)容之上進(jìn)一步的開發(fā)和討論我們怎樣部署在在Docker和Elastic Beanstalk環(huán)境中。本文將分成4個部分講解。

參考資源

原始的Python應(yīng)用(非Docker化)源代碼托管在GitHub上(master版本),網(wǎng)址為https://github.com/awslabs/eb-py-flask-signup/tree/docker。Docker化的版本在docker版本中,網(wǎng)址為:https://github.com/awslabs/eb-py-flask-signup/tree/docker

如果你喜歡代碼和不同版本間的比對,你可利用GitHub對比功能查看兩個版本的區(qū)別。網(wǎng)址為https://github.com/awslabs/eb-py-flask-signup/compare/master...docker。你也可以查看Docker化后添加的每個文件或者每行代碼。

Docker化階段1:添加Dockerfile文件

首先從GitHub上克隆源代碼:

 
 
  1. $> git clone git@github.com:awslabs/eb-py-flask-signup.git
  2. $> cd eb-py-flask-signup
  3. $> git checkout master

通過查看目錄內(nèi)容,知道這是一個簡單的Python應(yīng)用,使用Flask框架,Boto和一些其他的依賴(在requirements.txt中聲明了該依賴),其中Boto用于DynamoDB和SNS的互動。

足夠簡單,以至于我們只需創(chuàng)建一個Dockerfile,構(gòu)建一個適用于運行該應(yīng)用的鏡像。Dockerfile和其他應(yīng)用源均放在目錄中(即,和requirements.txt, application.py等等放在一塊)。

 
 
  1. FROM ubuntu:12.10
  2. # Install Python Setuptools
  3. RUN apt-get install -y python-setuptools
  4. # Install pip
  5. RUN easy_install pip
  6. # Add and install Python modules
  7. ADD requirements.txt /src/requirements.txt
  8. RUN cd /src; pip install -r requirements.txt
  9. # Bundle app source
  10. ADD . /src
  11. # Expose
  12. EXPOSE  5000
  13. # Run
  14. CMD ["python", "/src/application.py"]

Docker化階段 2 :在本地測試

雖然這個應(yīng)用程序需要一個DynamoDB表和SNS主題來完成全部功能,不過我可以但沒有測試它們:

首先, 構(gòu)建 Docker 鏡像:

 
 
  1. $> docker build -t eb-py-sample .

最后 (直接到可以使用后!),通過構(gòu)建好的image運行一個container (映射 container 的5000端口到主機的8080端口, 并且按照下面的代碼設(shè)置一些環(huán)境變量):

 
 
  1. $> docker run -d \
  2.      -e APP_CONFIG=application.config.example \
  3.      -e AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID \
  4.      -e AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY \
  5.      -p 8080:5000 \
  6.      eb-py-sample

在 OS X上,我打開 http://localhost:8080鏈接,下圖顯示的就是我的一個應(yīng)用程序!

邊欄:我們使用-e選項來傳遞一些選項:

  1. APP_CONFIG: 這個程序使用這個選項加載(指向)它的配置文件. 默認(rèn)我們指定一個默認(rèn)的配置文件。 你可以創(chuàng)建一個 DynamoDB 表和SNS 主題并且將他們添加到這個配置文件中,以使你的應(yīng)用程序在本地開發(fā)的時候可以更完美的工作。
  2. AWS_ACCESS_KEY_ID 和 AWS_SECRET_ACCESS_KEY: 這個應(yīng)用程序使用 Boto 來連接 DynamoDB 和SNS, 并且 Boto 使用這些環(huán)境變量來認(rèn)證請求以上服務(wù)。這些設(shè)置僅僅是為了本地開發(fā)。 當(dāng)我們向 Elastic Beanstalk 部署時將使用統(tǒng)一身份和訪問控制方案(IAM) 角色(Roles)。

Docker 化階段 3: 修改  .ebextensions

我們的應(yīng)用程序擁有一個特殊的文件夾 .ebextensions,里面有個 setup.config 文件。我們使用這個文件通知來 Elastic Beanstalk 創(chuàng)建我們程序所需要的 DynamoDB 表和 SNS 主題, 同時他會創(chuàng)建一個配置文件   /var/app/app.config  ,這個文件包含了我們剛才創(chuàng)建的 DynamoDB 表和 SNS 主題的名字。

這個文件中還有一些特殊的地方是他擁有特殊的在 Elastic Beanstalk(相對于 Docker)中的 Python的環(huán)境類型(python版本?) ,我們需要把他們移除掉:

修改 files 的成員,并且移除掉 owner 和 group 鍵,使他看起來像下面的這些:

 
 
  1. files:
  2.   "/var/app/app.config":
  3.     mode: "000444"
  4.     content: |
  5.       AWS_REGION = '`{ "Ref" : "AWS::Region"}`'
  6.       STARTUP_SIGNUP_TABLE = '`{ "Ref" : "StartupSignupsTable"}`'
  7.       NEW_SIGNUP_TOPIC = '`{ "Ref" : "NewSignupTopic"}`'

修改 option_settings ,刪除靜態(tài)文件映射。使他看起來像下面的這些:

 
 
  1. option_settings:
  2.   "aws:elasticbeanstalk:customoption":
  3.      "AlarmEmail" : "nobody@amazon.com"
  4.   "aws:elasticbeanstalk:application:environment":
  5.     "APP_CONFIG": "/var/app/app.config"
  6.     "FLASK_DEBUG": "false"
  7.     "THEME": "flatly"

檢查一下setup.config文件,確認(rèn)前面的所有變化是否正確,或者可以參考托管在在GitHub上的setup.config。

Docker化階段4: 部署到Elastic Beanstalk

我已經(jīng)建立并測試了我的本地容器,移除了一些.ebextensions,它是特定的Elastic Beanstalk Python環(huán)境,我已經(jīng)信心滿滿地準(zhǔn)備部署它了!

我創(chuàng)建了一個文件,名字叫做Dockerrun.aws.json,與此類似,我創(chuàng)建了Dockerfile。這個文件將會告訴Elastic Beanstalk 怎么去運行Docker容器并且它看起來像是這樣的(這個文件的詳細(xì)信息,請參閱下方)。

 
 
  1. {
  2.   "AWSEBDockerrunVersion": "1",
  3.   "Volumes": [
  4.     {
  5.       "ContainerDirectory": "/var/app",
  6.       "HostDirectory": "/var/app"
  7.     }
  8.   ],
  9.   "Logging": "/var/eb_log"
  10. }

關(guān)于Dockerrun.aws.json

Volumes成員將會在EC2上映射/var/app實例到容器上的/var/app。Docker容器通過訪問app.config文件并通過創(chuàng)建.ebextensions/setup.config得以讓app在容器上運行。Logging成員告訴Elastic Beanstalk我們的Docker app將會記錄日志到/var/eb_log到容器中。在控制臺里,無論什么時候你點擊Snapshot Logs或者如果你啟用自動日志輪轉(zhuǎn),Beanstalk將會自動推送日志/var/eb_log到這個目錄。

我將提交我的修改,并且使用 git archive 來生成一個zip文件以便部署到Elastic Beanstalk上(你可以使用zip工具、Finder或Windows 資源管理器來打包):

 
 
  1. $> git add Docker* && git commit -am "Dockerized"
  2. $> git archive --format=zip HEAD > eb-py-flask-signup.zip

之后,我通過 Elastic Beanstalk Management Console 來部署生成后的zip包

當(dāng)我的環(huán)境通過之后,我可以訪問它,確保它可以正常工作:

我還保存了環(huán)境日志的快照:

由于我之前往Dockerrun.aws.json文件中添加了Logging 成員,所以,容器中輸出到/var/eb_log中的日志可以被定向到S3,并且我可以在瀏覽器中訪問它們:

接下來

在下一篇文章中,我將會使用 eb 命令行工具直接在命令行中部署這個Dockerized程序,不需要瀏覽器或管理控制臺!

相關(guān)資源

  • Dockerized sample app on GitHub - https://github.com/awslabs/eb-py-flask-signup/tree/docker

  • Docker on Elastic Beanstalk documentation - http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/create_deploy_docker.html

英文原文:Dockerizing a Python Web App

譯文鏈接:http://www.oschina.net/translate/dockerizing-a-python-web-app


本文標(biāo)題:在Docker中運行一個Python的Web應(yīng)用
文章出自:http://www.dlmjj.cn/article/dhhcggg.html