2017-04-22 40 views
0

我正在构建一个网站,其中包含几个后端和前端组件。我想使用docker撰写部署到生产服务器。示例码头组成web应用程序devops的设置

这里有各种部件:

后端

  • C++代码来构建共享库与Python包装使用
  • 从先前步骤
  • 产生
  • 龙卷风web服务器使用Python库Postgresql数据库服务器

前端

  • ReactJS,的WebPack,节点,(HTML/CSS)

假设我保持每Dockerfile一个进程的咒语,我想建立单独的图像上面显示的每个“层” - 但是,都是我确定的层“正确” - 它是否有意义分开后端和前端?

最后,可能有人展示了一个docker_compose.yml文件,让我从不同的零件组装的网站 - 同时考虑到,依赖诸如取决于由C++应用程序生成了Python库都,以及龙卷风应用作为pg数据库服务。

回答

2

我认为拆分你的后端和前端应用程序绝对有意义。

我不太确定我完全理解你的需求,它围绕一个C++应用程序生成由Python使用的库。你的意思是说你有使用C库的Python包吗?

无论如何,你会发现下面,我已附加一个示例docker-compose.yml文件。我甚至已经为您的前端和后端应用程序包括网络分段,尽管这是可选的并且由您决定。

因为您特别提到了依托Python和数据库的Tornado容器,我使用的服务级别为depends_on。请注意,在这些其他服务“准备就绪”之前,只有等到其容器启动后,才会启动tornado容器。有关此协调的更多信息,请参阅Docker文档(https://docs.docker.com/compose/compose-file/#dependson)。

version: '3' 
services: 
    python_app: 
    image: your_name/your_python_image 
    ports: 
     - 5000:5000 
    networks: 
     - backend 

    # https://hub.docker.com/_/postgres/ 
    database: 
    image: postgres 
    ports: 
     - 5432:5432 
    environment: 
     - POSTGRES_PASSWORD=mysecretpassword 
    networks: 
     - backend 

    tornado: 
    image: your_name/your_tornado_image 
    ports: 
     - 8000:8000 
    depends_on: 
     - python_app 
     - database 
    networks: 
     - frontend 

    front_end: 
    image: your_name/your_front_end_image 
    ports: 
     - 80:80 
     - 443:443 
    networks: 
     - frontend 
     - backend 

# https://docs.docker.com/compose/networking/#specifying-custom-networks 
networks: 
    frontend: 
    backend: 

很高兴与您一起工作了更多,并建立起一个您感觉舒适的解决方案。

+0

非常感谢示例docker_compose.yml文件。 C++应用程序生成共享库,然后SWIG用它自动生成一个包含共享库导出的方法的Python库。然后,Tornado应用程序具有从自动生成的Python代码中调用纯函数和方法的函数。我是新来的码头工人 - 所以请在我调整您提供的样板代码的同时,让我忍受(待命),以使其正常工作。感谢和代码+1。 –