欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

在Docker上開(kāi)始部署Python應(yīng)用的教程

 更新時(shí)間:2015年04月17日 09:25:01   投稿:goldensun  
這篇文章主要介紹了在Docker上開(kāi)始部署Python應(yīng)用的教程,Docker是時(shí)下最火爆的虛擬機(jī),正在被各大云主機(jī)服務(wù)商所采用,需要的朋友可以參考下

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

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

原始的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

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


Docker化階段1:添加Dockerfile文件

首先從GitHub上克隆源代碼:
 

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

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

足夠簡(jiǎn)單,以至于我們只需創(chuàng)建一個(gè)Dockerfile,構(gòu)建一個(gè)適用于運(yùn)行該應(yīng)用的鏡像。Dockerfile和其他應(yīng)用源均放在目錄中(即,和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 :在本地測(cè)試

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

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

 

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

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

$> 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上,我打開(kāi) http://localhost:8080鏈接,下圖顯示的就是我的一個(gè)應(yīng)用程序!

201541791344800.png (852×801)


   

復(fù)制代碼 代碼如下:
邊欄:我們使用-e選項(xiàng)來(lái)傳遞一些選項(xiàng):

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

Docker 化階段 3: 修改  .ebextensions

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

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

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

 

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 ,刪除靜態(tài)文件映射。使他看起來(lái)像下面的這些:
 

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文件,確認(rèn)前面的所有變化是否正確,或者可以參考托管在在GitHub上的setup.config。

Docker化階段4: 部署到Elastic Beanstalk

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

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

 

 {
  "AWSEBDockerrunVersion": "1",
  "Volumes": [
   {
    "ContainerDirectory": "/var/app",
    "HostDirectory": "/var/app"
   }
  ],
  "Logging": "/var/eb_log"
 }

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

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


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

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

之后,我通過(guò) Elastic Beanstalk Management Console 來(lái)部署生成后的zip包

201541791911596.png (1920×1035)

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

201541791955567.png (852×801)

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

201541792043093.png (142×57)

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

201541792111434.png (1920×1200)

相關(guān)文章

  • 解決django.db.utils.IntegrityError:(1048, Column last_login cannot be null)

    解決django.db.utils.IntegrityError:(1048, Column las

    這篇文章主要介紹了解決django.db.utils.IntegrityError:(1048, Column last_login cannot be null)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • Python之sklearn數(shù)據(jù)預(yù)處理中fit(),transform()與fit_transform()的區(qū)別

    Python之sklearn數(shù)據(jù)預(yù)處理中fit(),transform()與fit_transform()的區(qū)別

    這篇文章主要介紹了Python之sklearn數(shù)據(jù)預(yù)處理中fit(),transform()與fit_transform()的區(qū)別及說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • 利用 Flask 動(dòng)態(tài)展示 Pyecharts 圖表數(shù)據(jù)方法小結(jié)

    利用 Flask 動(dòng)態(tài)展示 Pyecharts 圖表數(shù)據(jù)方法小結(jié)

    本文將介紹如何在 web 框架 Flask 中使用可視化工具 pyecharts, 看完本教程你將掌握幾種動(dòng)態(tài)展示可視化數(shù)據(jù)的方法。感興趣的朋友跟隨小編一起看看吧
    2019-09-09
  • Python裝飾器詳細(xì)介紹

    Python裝飾器詳細(xì)介紹

    這篇文章主要介紹了Python @property裝飾器的用法,在Python中,可以通過(guò)@property裝飾器將一個(gè)方法轉(zhuǎn)換為屬性,從而實(shí)現(xiàn)用于計(jì)算的屬性,下面文章圍繞主題展開(kāi)更多相關(guān)詳情,感興趣的小伙伴可以參考一下
    2022-12-12
  • Python下載網(wǎng)易云歌單歌曲的示例代碼

    Python下載網(wǎng)易云歌單歌曲的示例代碼

    這篇文章主要介紹了Python下載網(wǎng)易云歌單歌曲的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • Windows上使用Python增加或刪除權(quán)限的方法

    Windows上使用Python增加或刪除權(quán)限的方法

    下面小編就為大家分享一篇Windows上使用Python增加或刪除權(quán)限的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-04-04
  • 淺談Python訪問(wèn)MySQL的正確姿勢(shì)

    淺談Python訪問(wèn)MySQL的正確姿勢(shì)

    這篇文章主要介紹了淺談Python訪問(wèn)MySQL的正確姿勢(shì),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-01-01
  • PyTorch中dataloader制作自定義數(shù)據(jù)集的實(shí)現(xiàn)示例

    PyTorch中dataloader制作自定義數(shù)據(jù)集的實(shí)現(xiàn)示例

    本文主要介紹了PyTorch中dataloader制作自定義數(shù)據(jù)集的實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2025-05-05
  • Python利用Prim算法生成迷宮

    Python利用Prim算法生成迷宮

    普里姆算法(Prim算法),圖論中的一種算法,可在加權(quán)連通圖里搜索最小生成樹(shù)。這篇文章將利用Prim算法實(shí)現(xiàn)迷宮的生成,感興趣的可以了解一下
    2023-01-01
  • django如何連接已存在數(shù)據(jù)的數(shù)據(jù)庫(kù)

    django如何連接已存在數(shù)據(jù)的數(shù)據(jù)庫(kù)

    這篇文章主要給大家介紹了關(guān)于django如何連接已存在數(shù)據(jù)的數(shù)據(jù)庫(kù)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用django具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2018-08-08

最新評(píng)論