欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

在Docker上開始部署Python應用的教程

系統 1893 0

幾周前, 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上克隆源代碼:
?

            
$> 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鏈接,下圖顯示的就是我的一個應用程序!

在Docker上開始部署Python應用的教程_第1張圖片


???

復制代碼 代碼如下:
邊欄:我們使用-e選項來傳遞一些選項:

  • ??????? APP_CONFIG: 這個程序使用這個選項加載(指向)它的配置文件. 默認我們指定一個默認的配置文件。 你可以創建一個 DynamoDB 表和SNS 主題并且將他們添加到這個配置文件中,以使你的應用程序在本地開發的時候可以更完美的工作。
  • ??????? 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包

在Docker上開始部署Python應用的教程_第2張圖片

當我的環境通過之后,我可以訪問它,確保它可以正常工作:

在Docker上開始部署Python應用的教程_第3張圖片

我還保存了環境日志的快照:

201541792043093.png (142×57)

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


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 国产日产精品一区二区三区四区 | 一级做a爰片久久毛片看看 欧美日韩精品国产一区二区 | 天天色天天 | 亚洲黄色第一页 | 天天操狠狠操夜夜操 | www.99re| 婷婷精品国产亚洲AV在线观看 | 精品国产一区二区三区成人影院 | 哥斯拉大战金刚2在线观看免费完整版 | 欧美一区二区三区四区视频 | 国产精品一区久久久 | 久久aⅴ国产欧美74aaa | 大陆精品自在线拍国语 | 欧美123 | 欧洲一区二区在线 | 99中文在线 | 亚洲精品一区二区网址 | 国产日韩亚洲不卡高清在线观看 | 观看av | 色播欧美 | 亚洲精品人成网在线播放蜜芽 | 国产日韩一区 | 国产三级在线视频播放线 | 91精品国产乱码久久久久久久久 | 美女用震蛋叫爽的视频95视频 | 国产日韩精品一区 | 国产精品视_精品国产免费 亚洲综合在线另类色区奇米 | 国产WW久久久久久久久久 | 日本高清com| 毛片1级 | www.国产高清| 亚洲一区在线观看视频 | 国产日韩中文字幕 | 国产www在线播放 | 精品一区二区三区四区五区六区 | 日本高清无吗 | 日韩欧美在线观看视频 | 国产不卡视频在线播放 | 欧美一级毛片在线 | 色偷偷综合 | 国产视频福利 |