现在我们运行了web服务器,已经非常接近我们在产品中使用的东西了(我有意的使用Apache来做这点而不是Python默认的web服务器)。我们通过从主机向容器映射的方式向容器中注入代码;也可以在Dockerfile命令行中是用ADD来添加代码,但那样的话当我们队代码进行改动时,每次都需要重新构建容器。
然而,这仍然不是很好 ;开发中我们真的希望使用很大程度上帮助我们调试的Python web服务器。该高兴的是我们不用对Dockerfile进行任何修改。在example_app文件从创建一个run.py文件开始,按照一下内容:
!flask/bin/python from app import app
app.run(debug = True, host='0.0.0.0')
这将启动Python的带调试的web服务器并监听所有连接,我们也能从容器外访问。现在用下列命令重启容器:
1
$ docker run -p 5000:5000 -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行的设置。现在如果编辑在主机上的源程序,就能马上看到网页上的改变。
让我们花点时间看看我们的收获:
一个运行在隔离容器中的web应用,容器完全封装了应用的Python依赖项和系统依赖项。
能够使用现有编辑器或IDE开发代码并直接查看变化,就像在本地编辑一样。
比以前更接近正式产品的运行环境。
没有使用virtualenv。
如果你想知道如何以这种方式建立程序发布的途径,可以看看Mark Coleman写的关于前面提到的可视化Web应用的文章。
不幸的是,这一切还不完美。还有下列几个问题:
你可能仍会遇到需要使用virtualenv或其等价解决方案的情况,例如库的操作系统版本与你的程序所需版本间的冲突。
我们还没完全解决数据托管的问题,仍需做某些测试。
我假设的“产品”是一个Docker容器,但实际情况常常并非如此而且Docker托管本身也刚刚起步。
尽管如此,我仍然认为这向软件开发的更好未来迈了一大步,大大减轻了部署软件和管理依赖项的痛苦。
CentOS 7安装Docker V1.0
开源项目Docker,Red Hat新的虚拟化选择
在 Docker 中使用 MySQL