在Docker上开始部署Python应用的教程

989次阅读  |  发布于6年以前

几周前, 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链接,下图显示的就是我的一个应用程序!

201541791344800.png \(852×801\)

复制代码 代码如下:

边栏:我们使用-e选项来传递一些选项:

Copyright© 2013-2020

All Rights Reserved 京ICP备2023019179号-8