使用Docker开发python Web应用的案例
本站和大家分享了用Docker开发python Web应用的案例。相信大部分人都不太了解,分享这篇文章,供大家参考。在本文中,我将尝试展示用Docker开发python应用程序的可行方法。虽然我关注的是Python的Flask微框架,但本文的目的是演示如何通过Docker更好地开发和共享应用。Docker通过封装依赖关系大大缩小了开发环境和正式产品之间的差距。大多数Python开发人员在开发中使用virtualenv。它提供了一种易于使用的机制,让应用程序使用自己的特殊依赖关系,这种依赖关系可能会与其他应用程序或操作系统发生冲突。它不能提供“纯”隔离,只能提供python级别的隔离。好消息是,我们不必对Dockerfile进行任何更改。
本站和大家分享了用Docker开发python Web应用的案例。相信大部分人都不太了解,分享这篇文章,供大家参考。希望你看完这篇文章后收获很大。我们一起来看看。
在本文中,我将尝试展示用Docker开发python应用程序(主要是Web应用程序)的可行方法。虽然我关注的是Python的Flask微框架,但本文的目的是演示如何通过Docker更好地开发和共享应用。Docker通过封装依赖关系大大缩小了开发环境和正式产品之间的差距。
大多数Python开发人员在开发中使用virtualenv。它提供了一种易于使用的机制,让应用程序使用自己的特殊依赖关系,这种依赖关系可能会与其他应用程序或操作系统(尤其是不同的Pyhton版本、不同的库版本等)发生冲突。).就我个人而言,我从未对virtualenv感兴趣,原因如下:
经常忘记启用,或者切换项目的时候忘记切换,导致错误信息模糊,让人感觉很迷茫。
它不能提供“纯”隔离,只能提供python级别的隔离(系统库和非Python依赖项还是会有问题)。
我一般都不想在正式产品上运行,也就是说开发环境和正式产品不一致。
让人觉得有点“黑客”:通过修改脚本,设置新路径来实现。
(查看pythonrants中的这篇文章,了解为什么您可能不想使用virtualenv)
那么,我们能做些什么来让Docker变得更好呢?Docker本质上提供了非常轻量级的虚拟机(可称为“容器”),可用于创建高标准隔离的开发和产品环境,并大大减少不匹配。(如果你不熟悉Docker,但想了解更多,可以查看我在爱丁堡技术研讨会上关于Docker的演讲。).
当我们建立一个小型可视化Web APP时,我和Mark Coleman使用了这种方法(文档在这里)。这个(内部)突出显示了安装Python 2.7的基本映像,以及一些Flask管理和PostgreSQL内容。我将基于这个图像开发一个hello world Web应用程序。我假设您正在Linux上开发,并且已经安装了git和Docker。MacOS的指令应该很像。首先克隆并创建一个基本镜像:
$ docker build ndasht示例_ app。
$ docker run ndashp 5000 : 5000 ndashv $(pwd)/example _ app :/opt/example _ app/ndash;i ndasht示例_app
你应该得到这样的反馈:通过浏览器打开地址localhost:5000,你会看到你的网站在运行。如果你运行在虚拟机或无业游民中,记得打开端口5000。
现在我们运行的是非常接近我们在产品中使用的网络服务器,(我有意使用Apache来代替Python的默认网络服务器。我们通过从主机到容器的映射将代码注入容器。您也可以使用ADD在Dockerfile命令行上添加代码,但是当我们更改代码时,我们需要每次都重新构建容器。
但是,这样还是不太好;在开发中,我们非常想使用Python网络服务器,这在很大程度上帮助我们进行调试。好消息是,我们不必对Dockerfile进行任何更改。在示例_app文件中,首先创建一个run.py文件,并遵循以下内容:
这将启动Python的网络服务器,调试并监听所有连接,我们也可以从容器外部访问这些连接。现在使用以下命令重新启动容器:
$ docker run-p 500033605000-v $(pwd)/example _ app :/opt/example _ app/-I-t example _ app python/opt/example _ app/run . py
您可以看到网页再次运行。这一次,我们明确地提供了运行命令(“python /opt/example_app/ryn.py”),它覆盖了Dockerfile中CMD行的设置。现在,如果您在主机上编辑源程序,您可以立即在网页上看到更改。
让我们花点时间看看我们的收获:
运行在独立容器中的网络应用程序完全封装了应用程序的Python依赖和系统依赖。
能够使用现有编辑器或IDE直接开发代码和查看更改,就像在本地编辑一样。
比以前更接近官方产品的运营环境。
不使用Virtualenv。
如果你想知道如何建立一种以这种方式发布程序的方法,你可以看看马克科尔曼关于前面提到的可视化Web应用的文章。
不幸的是,这一切并不完美。还有以下问题:
您可能仍然会遇到需要使用virtualenv或其等效解决方案的情况,例如库的操作系统版本和程序的所需版本之间的冲突。
我们还没有完全解决数据托管的问题,还需要做一些测试。
我假设“产品”是一个Docker容器,但情况往往不是这样,Docker托管本身才刚刚开始。
尽管如此,我仍然认为这是朝着软件开发更美好的未来迈出的一大步,这大大减轻了部署软件和管理依赖关系的痛苦。
“用Docker开发python Web应用的案例”一文的内容就这么多了。谢谢大家看!相信大家都有一定的了解,希望分享的内容对大家有所帮助。如果你想学习更多的知识,请关注本站!
《使用Docker开发python Web应用的案例》来自互联网同行内容,若有侵权,请联系我们删除!