13.4.2 FlaskFlask是一个使用Python编写的轻量级Web应用框架。基于Werkzeug WSGI工具箱和Jinja2模板引擎。Flask使用BSD授权。Flask也称为“microframework”因为它仅仅使用简单的核心使用extension来增加其他功能。笔者在此简述一下Flask的特色·内置开发用服务器和调试器debugger·集成单元测试unit testing·RESTful request dispatching·使用Jinja2模板引擎·支持secure cookiesclient side sessions·100%WSGI 1.0兼容·Unicode based·详细的文件、教学·Google App Engine兼容·可用Extensions增加其他功能Flask是目前广受欢迎的Python Web技术选型之一。1.使用官方镜像第一步项目准备工作构建Flask App目录src/run.pyapp/__init__.pyviews.pystatic/templates/run.py#!flask/bin/pythonfrom app import appapp.run(host0.0.0.0 port5000 debugTrue)_init.py:from flask import Flaskapp Flask(__name__)from app import views第二步下载Docker Hub的Flask镜像$ sudo docker pull verdverm/flask第三步创建并运行Flask容器Flask的App代码作为Docker数据卷$ sudo docker run -d --name flask-app \-v /path/to/app/src:/src \-p 5000:5000 \verdverm/flask2.定制镜像笔者首先推荐读者基于本书第10章的SSHD镜像进行Flask镜像的定制这样可以使用SSH服务方便的访问Flask容器。当然读者也可以使用以下Dockerfile来定制镜像FROM google/debian:wheezy# 系统更新RUN apt-get update# 安装Python环境RUN apt-get --no-install-recommends install -y python-setuptools build-essential python-dev libpq-dev ca-certificates# 安装pipRUN easy_install pipADD requirements.txt /tmp/requirements.txt# 安装requirements.txt中的依赖包 此处可至RUN pip install -r /tmp/requirements.txtEXPOSE 5000VOLUME [/src]WORKDIR /srcENTRYPOINT [quot;pythonquot; quot;/src/run.pyquot;]CMD [quot;runserverquot;]13.4.3 DjangoDjango是一个开放源代码的Web应用框架由Python写成。采用了MVC的软件设计模式即模型M、视图V和控制器C。它最初是用于管理劳伦斯出版集团旗下的一些以新闻内容为主的网站的。并于2005年7月在BSD许可证下发布。这套框架是以比利时的吉普赛爵士吉他手Django Reinhardt来命名的。Django的主要目标是使得开发复杂的、数据库驱动的网站变得简单。Django注重组件的重用性和“可插拔性”敏捷开发和DRY法则Dont Repeat Yourself。在Django中Python被普遍使用甚至包括配置文件和数据模型。Django于2008年6月17日正式成立基金会。Django是Python MVC框架中开源组织最完善、社区人气最旺的。Django框架的核心包括·一个轻量级的、独立的Web服务器用于开发和测试。·一个表单序列化及验证系统用于HTML表单和适于数据库存储的数据之间的转换。·一个缓存框架并有几种缓存方式可供选择。·中间件支持允许对请求处理的各个阶段进行干涉。·内置的分发系统允许应用程序中的组件采用预定义的信号进行相互间的通信。·一个序列化系统能够生成或读取采用XML或JSON表示的Django模型实例。·一个用于扩展模板引擎的能力的系统。Django包含了很多应用在它的“contrib”包中这些包括·一个可扩展的认证系统。·动态站点管理页面。·一组产生RSS和Atom的工具。·一个灵活的评论系统。·产生Google站点地图Google Sitemaps的工具。·防止跨站请求伪造cross-site request forgery的工具。·一套支持轻量级标记语言Textile和Markdown的模板库。·一套协助创建地理信息系统GIS的基础框架。Django虽然相比Tornado、Flask、Web.py等框架要“重”。但是它“重”在提供一站式框架提供一些方便快速开发的特性如脚手架完整的面向对象的ORM还有方便的模板系统。如果创业过程中的中小型项目选择Python技术栈又对并发支撑能力要求不苛刻的话可以放心地选择Django。Django是目前广受欢迎的Python Web技术选型之一。1.使用Docker Hub镜像测试数据显示DjangouWSGI and Nginx的技术组合拥有优异的性能。我们选用的Docker Hub镜像即使用此技术栈$ sudo docker pull dockerfiles/django-uwsgi-nginx读者也可以利用Dockerfile进行定制自行构建$ sudo docker build -t webapp .运行$ sudo docker run -d webapp2.定制镜像读者可以自建SSHD镜像后制作自定义的Django镜像。当然也可以使用以下Dockerfile来定制镜像# 本Dockerfile由Thatcher Peskens贡献 遵循Apache许可from ubuntu:precisemaintainer Dockerfilesrun echo deb http://archive.ubuntu.com/ubuntu precise main universe /etc/apt/sources.listrun apt-get updaterun apt-get install -y build-essential gitrun apt-get install -y python python-dev python-setuptoolsrun apt-get install -y nginx supervisorrun easy_install pip# 安装uwsgirun pip install uwsgi# 安装nginxrun apt-get install -y python-software-propertiesrun apt-get updateRUN add-apt-repository -y ppa:nginx/stablerun apt-get install -y sqlite3# 添加项目代码add . /home/docker/code/# 修改配置run echo daemon off /etc/nginx/nginx.confrun rm /etc/nginx/sites-enabled/defaultrun ln -s /home/docker/code/nginx-app.conf /etc/nginx/sites-enabled/run ln -s /home/docker/code/supervisor-app.conf /etc/supervisor/conf.d/# 运行pip installrun pip install -r /home/docker/code/app/requirements.txt# 安装djangorun django-admin.py startproject website /home/docker/code/app/expose 80cmd [supervisord -n]13.4.4 相关资源Python官网https://www.python.org/关于Python 1http://wiki.woodpecker.org.cn/moin/WhyPython关于Python 2http://www.linuxjournal.com/article/3882Python Docker官方Dockerfilehttps://github.com/docker-library/python/Python Docker官方镜像https://registry.hub.docker.com/_/python/Python Docker官方镜像Taghttps://registry.hub.docker.com/_/python/tags/manage/Flask官网http://flask.pocoo.org/Flask Docker镜像https://registry.hub.docker.com/u/verdverm/flask/Flask Dockerfilehttps://registry.hub.docker.com/u/verdverm/flask/dockerfile/Django官网https://www.djangoproject.com/Django Docker镜像https://registry.hub.docker.com/u/dockerfiles/django-uwsgi-nginx/Django Dockerfilehttps://registry.hub.docker.com/u/dockerfiles/django-uwsgi-nginx/dockerfile/13.5 Perl13.5.1 Perl技术栈Perl是一个高级的动态的解释型脚本语言。Perl的设计借鉴了C、Shell、awk和sed。Perl最重要的特性是它内部集成了正则表达式的功能以及巨大的第三方代码库CPAN。Perl像C一样强大同时像awk、sed等脚本语言一样富有表达性被称为“Unix系统王牌工具”。目前Perl常见于系统管理、文件处理等程序笔者认为Perl多数情况下属于Web方案中的胶水语言。下面笔者讲主要介绍Perl5的Docker环境。使用官方镜像我们可以使用Docker官方的Perl镜像作为基础在此之上进行必要的定制。第一步下载Docker官方的Perl镜像$ sudo docker pull perl如果读者对Perl的版本有要求可以在以上命令中加入Tag标签以便于在下一步Dockerfile的FROM指令中明确Perl版本号。官方镜像都有明确的标签列表具体地址可以参见后面的“相关资源”部分。第二步在读者的Perl项目中新建一个DockerfileFROM perl:5.20COPY . /usr/src/myappWORKDIR /usr/src/myappCMD [ perl ./your-daemon-or-script.pl ]第三步通过此Dockerfile构建自定义的镜像$ sudo docker build -t my-perl-app .第四步创建容器并运行$ sudo docker run -it --rm --name my-running-app my-perl-app如果读者只需要运行单个的Perl脚本那么无需使用Dockerfile构建自定义镜像而是通过以下命令直接使用官方Perl镜像带参数运行容器$ sudo docker run -it --rm --name my-running-script -v $(pwd):/usr/src/myapp -w /usr/src/myapp perl:5.20 perl your-daemon-or-script.pl如果读者需要运行Perl的Web项目则最好先自建内置SSH服务的镜像然后以此为基础定制Perl容器这样可以方便地通过SSH服务访问Perl容器。13.5.2 CatalystCatalyst是一个用Perl语言开发的MVC框架。1.使用Docker Hub镜像使用Docker Hub镜像如下所示$ sudo docker pull rsrchboy/perl-catalyst-latest使用Perl容器进行一下操作$ sudo cpancpaninstall Catalyst::Devel$catalyst.pl myApp2.定制镜像读者可以使用以下Dockerfile来定制镜像# 本dockerfile由Chris Weyl贡献FROM rsrchboy/perl-stable:latestRUN apt-get update amp;amp; apt-get install -y libmysqlclient-dev libssl-dev libxml2-dev# 运行cpan管理器RUN cpanm -q --notest Capture::Tiny rm -rf ~/.cpanmRUN cpanm -q --installdeps LWP::UserAgent rm -rf ~/.cpanmRUN cpanm -q --notest LWP::UserAgent rm -rf ~/.cpanmRUN cpanm -q DBI DBD::mysql rm -rf ~/.cpanmRUN cpanm -q DBIx::Class rm -rf ~/.cpanmRUN cpanm -q DBIx::Class::Schema::Loader rm -rf ~/.cpanmRUN cpanm -q Reindeer rm -rf ~/.cpanmRUN cpanm -q Dist::Zilla rm -rf ~/.cpanmRUN cpanm -q Task::Plack rm -rf ~/.cpanmRUN cpanm -q Task::Catalyst rm -rf ~/.cpanm13.5.3 相关资源Perl官网http://www.perl.org/Perl中国官网http://www.perlchina.org/Perl6官网http://rakudo.org/how-to-get-rakudo/Perl Docker镜像https://registry.hub.docker.com/_/perl/Perl Docker镜像标签https://registry.hub.docker.com/_/perl/tags/manage/Catalyst官网http://www.catalystframework.org/Catalyst Docker镜像https://registry.hub.docker.com/u/rsrchboy/perl-catalyst-latest/Catalyst Dockerfilehttps://registry.hub.docker.com/u/rsrchboy/perl-catalyst-latest/dockerfile/Catalyst安装http://blog.sina.com.cn/s/blog_4aea5d890100ija9.html