【问题标题】:How to run multiple applications with single mongodb using docker如何使用 docker 使用单个 mongodb 运行多个应用程序
【发布时间】:2018-02-17 12:28:40
【问题描述】:

我希望能够在两个容器中运行两个独立的应用程序 - 每个独立应用程序一个。然后这两个应用程序应该能够与将容纳 MongoDB 的第三个容器进行通信。

  1. 我本地机器上的文件夹结构

    /Users/me/Dev: Dockerfile, docker-compose.yml 
    /Users/me/Dev/App1: with source code and package.json for app1
    /Users/me/Dev/App2: with source code and package.json for app2
    /Users/me/Dev/data/db: I wanna keep datafile for Mongo
    
  2. dockerfile - 但老实说,这两个应用程序重复两次看起来不太合适。 (这是我第一次使用 docker,所以还不熟悉如何为我的场景最好地准备 Dockerfile)

    FROM node:8.9.1
    WORKDIR ./app1/
    COPY ./package.json ./app1/
    RUN npm install
    CMD npm start
    COPY ./app1/ ./app1/
    EXPOSE 8081
    #
    FROM node:8.9.1
    WORKDIR ./app2/
    COPY ./package.json ./app2/
    RUN npm install
    CMD npm start
    COPY ./app2/ ./app2/
    EXPOSE 8082
    
  3. docker-compose.yml

    version: '2'
    
    services:
    app1:
    build: .
    volumes:
      - .:/app1
    ports:
      - "8082:8082"
    links:
      - mongo
    depends_on:
      - mongo
    
    # app2:
    #   build: .
    #   volumes:
    #     - .:./app2
    #   ports:
    #     - "8081:8081"
    #   links:
    #     - mongo
    #   depends_on:
    #     - mongo
    
    mongo:
    image: mongo:3.4.10
    volumes:
        - './dev/data/db:/data/db'
    ports:
        - "27017:27017"
    

几个问题: 例如,在 docker-compose build 上,我得到了 - 错误:服务 'app1' 无法构建:复制失败:stat /var/lib/docker/tmp/docker-builder287108072/package.json:没有这样的文件或目录

即使我尝试了多种方法在 Dockerfile 和 d-compose 中提供路径,我仍然不相信这会奏效。

所以我需要一些关于如何在我的主 DEV 文件夹(如上所述)中准备 Dockerfile 和 docker compose 的指导,以便 docker 将在同一个 docker 网络上启动 3 个容器(app1、app2、mongo)以进行通信彼此。

【问题讨论】:

  • 首先创建 docker 镜像。然后编写 docker-compose.yml 文件来运行应用程序。而不是建造。这是一个很好的做法。

标签: mongodb docker docker-compose dockerfile


【解决方案1】:

方法#1 只需更正您的 Dockerfile

路径需要先替换为文件夹路径

修正它

复制 ./App1/package.json ./app1/

复制 ./App2/package.json ./app2/

但这看起来是错误的做法。按照以下步骤创建 docker 镜像并使用 docker-compose.yml 部署它们,就像 mongo 镜像一样,您必须创建自己的镜像并使用 compose 运行它们。

方法#2 部署应用的良好做法

App1 Docker 镜像

  1. 转到您的 App1 文件夹并创建一个 Dockerfile

    Dockerfile

    FROM node:8.9.1
    WORKDIR ./app1/
    COPY ./package.json ./app1/
    RUN npm install
    CMD npm start
    COPY ./app1/ ./app1/
    EXPOSE 8081
    
  2. 使用

    创建 docker 镜像

    docker build -t app1Image .

App2 Docker 镜像

  1. 转到您的 App2 文件夹并创建一个 Dockerfile

    Dockerfile

    FROM node:8.9.1
    WORKDIR ./app2/
    COPY ./package.json ./app2/
    RUN npm install
    CMD npm start
    COPY ./app2/ ./app2/
    EXPOSE 8081
    
  2. 使用

    创建 docker 镜像

    docker build -t app1Image .

使用 compose 部署图像

  1. 在 Dev 文件夹中创建 docker-compose.yml

    docker-compose.yml

    version: '2'
    services:
       app1:
         image: app1Image
         ports:
           - 8082:8082
         links:
           - mongo
         depends_on:
           - mongo
       app2:
         image: app2Image
         ports:
           - 8081:8081
         links:
           - mongo
         depends_on:
           - mongo
       mongo:
         image: mongo:3.4.10
         ports:
           - 27017:27017
         volumes:
           - './dev/data/db:/data/db'
         links:
           - mongo
         depends_on:
           - mongo
    
  2. 使用 docker-compose 运行应用

    docker-compose up -d

【讨论】:

  • 非常感谢。它适用于图像。我将保留构建版本,在您回答后稍作调整,用于我的日常开发,当我希望在编辑 js 文件时实时反映更改。再次非常感谢您的回答。
  • 您不需要更改构建版本。总是使用最新的。通过标记对每个图像进行 Kepp 备份。如果它解决了您的目的,请将其标记为答案
猜你喜欢
  • 1970-01-01
  • 2019-05-31
  • 1970-01-01
  • 2018-06-03
  • 2015-07-16
  • 2023-03-22
  • 1970-01-01
  • 2020-05-29
  • 2021-09-22
相关资源
最近更新 更多