Docker:4个用于前端,后端,数据库,推送服务器的容器?

时间:2017-07-13 10:58:55

标签: docker containers

我刚开始使用docker,我正在试图弄清楚如何部署我们的webapplication。 我们得到了:

  • ReactJS Web应用程序& Workbench Frontend(非同构,Apache)
  • Java / Wildfly Server后端
  • PostgreSQL数据库
  • 用于推送通知的NodeJS Websocket服务器

我的第一个方法是将它全部放在一个ubuntu容器中,然后部署它。这导致了一个非常长的dockerfile,所以我认为这不是正确的方式I googled best practices并且达到了每个容器应该只有一个问题的程度。

这是否意味着我应该为上述每个进程使用一个容器并链接它们,这将导致4个正在运行的容器(数据库中有一个容量)?

我现在看到的优点是:

  • 可扩展性
  • 可维护性
  • 将应用程序的部分移动到不同的服务器/主机更容易

我能想到的唯一两个缺点是

  • 可能会复杂地将所有容器链接在一起
  • (小)由于4个容器而不是1个单独运行而导致的性能损失(以及更多用于排队,邮件服务器......)

1 个答案:

答案 0 :(得分:10)

您可以使用4种不同的容器!使用Docker,您通常希望尝试保持每个容器相对简单,但这并不意味着您必须将每个组件分成不同的容器,例如您的Web应用程序来自您的服务器API(我发现将它们组合在同一容器中很有用,因为它使通信更容易)但是将数据库放在一个单独的容器中是一种好习惯。 Docker有一个名为Docker Compose的工具,用于启动容器应用程序:

  

Compose是一个用于定义和运行多容器Docker应用程序的工具。使用Compose,您可以使用Compose文件来配置应用程序的服务。然后,使用单个命令,您可以从配置中创建并启动所有服务。 - Overview of Docker Compose

要使用此工具,您将:

  1. 为每个单独的容器创建一个包含文件夹的项目目录。

  2. 通过为子文件夹中的每个容器(Web App / Server API)(数据库)创建Dockerfile来定义应用程序环境。

  3. 服务器API的Dockerfile(和Web App(角度):

    # Create image based on the official Node 6 image from dockerhub
    FROM node:6
    
    # Create a directory where our app will be placed
    RUN mkdir -p /usr/src/app/
    
    # Change directory so that our commands run inside this new directory
    WORKDIR /usr/src/app
    
    # Get all the code needed to run the app
    COPY . /usr/src/app
    
    # Move into AngularApp directory
    WORKDIR /usr/src/app/public
    # Install dependencies for AngularApp
    RUN npm install
    # Changed to updated angular dependency
    RUN ./node_modules/@angular/cli/bin/ng build
    # Move into server directory
    WORKDIR /usr/src/app/server
    # Install dependencies for server
    RUN npm install
    # Return to top level directory of project
    WORKDIR /usr/src/app
    
    # Add API environment variables
    ENV USERNAME="username"
    ENV PASSWORD="password"
    
    # Expose the port the app runs in
    EXPOSE 4200
    EXPOSE 80
    
    WORKDIR /usr/src/app
    
    1. 在项目文件夹中定义docker-compose.yml文件。此文件将定义应用程序中的服务,以便它们可以在隔离环境中一起运行。 Compose file version 3 reference
    2. docker compose文件遵循以下结构:

      version: '3'
      services:
        web:
          build: <directory with Dockerfile for service>
          ports:
            - "5000:5000"
          volumes:
            - .:/code
            - logvolume01:/var/log
          links:
            - redis
        database:
          image: mongo
        volumes:
          logvolume01: {}
      
      1. 最后运行docker-compose up,Compose将开始运行整个应用程序!