几周前, 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链接,下图显示的就是我的一个应用程序!
复制代码 代码如下:
边栏:我们使用-e选项来传递一些选项:
APP_CONFIG: 这个程序使用这个选项加载(指向)它的配置文件. 默认我们指定一个默认的配置文件。 你可以创建一个 DynamoDB 表和SNS 主题并且将他们添加到这个配置文件中,以使你的应用程序在本地开发的时候可以更完美的工作。
Copyright© 2013-2020
All Rights Reserved 京ICP备2023019179号-8