本文讲的是<b>使用Compose和Machine来Docker化Flask:从本地到云端</b>,【编者的话】Docker 1.6发布了,Compose和Machine都在更新之列。本文具体说明了如何使用这两个组件来实现本地与云端的同步部署与管理。
与Docker(v1.6.0)一起,我们将使用:
检验一下安装是否成功:
这样就为容器启动和运行做好了准备。现在进入Docker Machine。
要启动Docker Machine,只需简单地运行:
<code>create</code>命令为Docker开发设置了一台“machine”(名为dev)。实际上,它下载了boot2docker,并启动了一个运行Docker的虚拟机。
运行如下命令来查看当前运行的Machine:
接下来,让我们使用Docker Compose来启动容器,让Flask应用及Postgres数据库启动并运行起来。
来看一眼docker-compose.yml文件:
这里,我们定义了四个服务:web、 nginx、 postgres和 data。
首先,web服务是通过Dockerfile的指令在“web”目录中构建的,在此设置了Python环境,安装了必要软件,并将Flask应用运行于8000端口。这个端口会被转发到宿主环境(比如Docker Machine)的80端口上。该服务还将.env文件中定义的环境变量添加到了容器里。
nginx服务作为反向代理用于转发请求到Flask应用或静态文件上。
在构建镜像前,我们需要将静态文件从“web/static”目录复制到“nginx/static”中,因为nginx Dockerfile是从“nginx”目录中添加静态文件目录的。要这么做,只需要简单地运行copy.sh脚本:
现在,要运行容器,只要构建镜像然后启动服务即可:
去喝一杯咖啡。或是两杯。第一次运行时间会久一点。
我们还需要创建数据库表:
打开浏览器并访问与Docker Machine关联的IP地址(<code>docker-machine ip</code>):

棒极了!
要查看web服务可用的环境变量,运行:
要查看日志:
你也可以进入Postgres命令行,这是因为我们在docker-compose.yml文件中转发了它的端口到宿主环境中,可以这样添加用户/角色及数据库:
一旦完成,通过<code>docker-compose stop</code>停止所有进程。
这将花费几分钟来准备droplet并设置一个名为production的新的Docker Machine:
现在,我们运行了两个Machine,一个本地的,一个在Digital Ocean上:
然后,设置production作为活动machine,并将Docker环境加载到命令行中:
最后,在云端再次构建Flask应用:
找到Digital Ocean账号关联的IP地址,并在浏览器中查看。如果所有东西都正确,应该能看到应用已经运行起来了。
祝贺你!
在下面提交你的评论
下一次,我们将扩展这个工作流以包括两个运行Flask应用的Docker容器,并加入负载均衡。敬请关注!
原文发布时间为:2015-04-21
本文作者:sean
本文来自云栖社区合作伙伴DockerOne,了解相关信息可以关注DockerOne。
原文标题:使用Compose和Machine来Docker化Flask:从本地到云端