示例docker为Web应用程序devops组合设置

时间:2017-04-22 15:43:44

标签: docker docker-compose dockerfile

我正在构建一个由多个后端和前端组件组成的网站。我想使用docker compose来部署到生产服务器。

以下是各种组成部分:

后端

  • 构建用于Python包装器的共享库的C ++代码
  • 使用上一步生成的python库的Tornado Web服务器
  • Postgresql数据库服务器

前端

  • ReactJS,webpack,node,(HTML / CSS)

假设我保持每个Dockerfile一个进程的口号,我想为上面显示的每个“层”构建单独的图像 - BUT ,我识别的层是“正确的” - 在后端和前端之间分开是否有意义?

最后,有人可以展示一个示例docker_compose.yml文件,该文件允许我从不同的部分组装网站 - 同时考虑到龙卷风应用程序等依赖项,这取决于C ++应用程序生成的Python库,以及pg数据库服务。

1 个答案:

答案 0 :(得分:2)

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

我不太确定我完全理解你对生成Python使用的库的C ++应用程序的要求。你只是说你有使用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:

很高兴与您一起完成更多这方面的工作,并建立一个您感到满意的解决方案。