如何将Docker添加到Django + Gunicorn + Nginx + Fabric

我使用Django与Gunicorn守护程序和Nginx的代理和静态文件。 我有一个非常简单的结构脚本来“自动化”一些操作:

  1. 我们在本地计算机上运行virtualenv
  2. 我们只把应用程序推到我们的GitHub仓库
  3. 我们SSH到服务器,并运行GitHub仓库中的结构脚本
  4. 它从GitHub中拉出,如果需要合并,重新启动Nginx和Gunicorn

这已经有一个问题,例如对于第一次部署,我需要从GitHub手动克隆。

现在,我们正处于一个阶段,我们的应用程序将被发送给我们的客户,以便他们可以托pipe自己的服务器(我们可能需要在不久的将来扩展)。 他们需要Docker容器部署在自己的服务器上。 我将ssh连接到他们的服务器来更新我们的应用程序的部署。

然而,我很难弄清楚什么是最佳的自动化方式,也就是每次使用Fabric的新版本时需要采取的操作顺序。

我的build议是创build一个Dockerfile,并且在发布分支的每个提交上都有一些持续集成服务器(Jenkins,CircleCI等)提取代码,运行一系列testing,然后构build并发布一个新的Docker镜像。 如果您需要付款,您可能希望它是私人的 – 这很容易做到,您可以设置一个私人dockerregistry。 你甚至可能会觉得这是一个比你目前的内部工作更好的工作stream程,因为它是全自动的。

以下是Dockerfile可能的外观示例:

 FROM debian:stable ADD . /code WORKDIR /code RUN apt-get update && apt-get install -y python-dev RUN pip install -r requirements.txt CMD python run.py 

这仅仅是一个例子,我不知道你的代码是如何构造的,但是它假定Dockerfile与脚本run.py一起,知道如何让事情运行。 它也假设你想要使用debian:stable – 这里有很多选项,你需要select最适合你的东西。 它还假定你有你的依赖组织在一个requirements.txt文件。 最后,我只是把apt-get扔在那里,以显示如何运行任意命令,并可能安装python的开发东西。

根据结构脚本的复杂程度,Dockerfile可以完全替代它,或者也可以将结构脚本作为Dockerfile中的一个步骤运行。

你可以在这里find更多关于Dockerfile格式的信息: https ://docs.docker.com/engine/reference/builder/

编辑:我应该补充 – 显然有一些决定,你需要做出关于你如何支持nginx的混合,因为典型的docker方式将是作为第二个图像和容器 – 这很容易足以做到(在我看来,更好的架构,而不是像在目前似乎是在一台机器中),但它需要一些注意。