如何使用Docker使用单个mongodb运行多个应用程序 [英] How to run multiple applications with single mongodb using docker

查看:111
本文介绍了如何使用Docker使用单个mongodb运行多个应用程序的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I want to be able to run two separate apps in two containers - one for each independent app. Then both apps should be able to communicate with the 3rd container which will hold MongoDB.

  1. 本地计算机上的文件夹结构

  1. Folder structure on my local machine

/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

  • dockerfile-但老实说,我对两个应用程序都重复两次也不太合适. (这是我第一次使用docker,因此还不熟悉如何为我的场景准备Dockerfile)

  • dockerfile - but honestly it does not look right too me to repeat twice for both apps. (Its a first time I am using docker so am not yet familiar with how to best prepare the Dockerfile for my scenario)

    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
    

  • docker-compose.yml

  • 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构建上,我得到-错误:服务'app1'无法构建:COPY失败:stat/var/lib/docker/tmp/docker-builder287108072/package.json:无此类文件或目录

    Few issues: On docker-compose build for example I got - ERROR: Service 'app1' failed to build: COPY failed: stat /var/lib/docker/tmp/docker-builder287108072/package.json: no such file or directory

    即使我尝试了多种方法在Dockerfile中提供路径并进行d-compose,我仍然不确定这是否行得通.

    Even if I tried multiple ways of providing the path in Dockerfile and d-compose I still am not convinced this is gonna work.

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

    So I need some guidance on how to prepare Dockerfile and docker compose in my main DEV folder (as described above) so that docker will start up 3 containers (app1, app2, mongo) all on the same docker network to communicate with each other.

    推荐答案

    方法#1只需更正Dockerfile

    首先需要使用文件夹路径替换路径

    Approach#1 Just correct your Dockerfile

    Path need to be replaced with the folder path first

    COPY ./App1/package.json ./app1/

    COPY ./App1/package.json ./app1/

    COPY ./App2/package.json ./app2/

    COPY ./App2/package.json ./app2/

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

    But this look wrong practice. Folow bellow steps to create the docker images and deploy them with the docker-compose.yml just like mongo image you have to create your own image and run them with compose.

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

    1. Goto your App1 folder and create a Dockerfile

    Dockerfile

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

  • 使用

  • Create docker images with

    docker build -t app1Image

    docker build -t app1Image .

  • App2 Docker映像

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

    1. Goto your App2 folder and create a Dockerfile

    Dockerfile

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

  • 使用

  • Create docker images with

    docker build -t app1Image

    docker build -t app1Image .

  • 使用compose部署映像

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

    1. Create docker-compose.yml in Dev folder

    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
    

  • 使用docker-compose运行应用

  • RUN App with docker-compose

    docker-compose up -d

    docker-compose up -d

    这篇关于如何使用Docker使用单个mongodb运行多个应用程序的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

  • 查看全文
    登录 关闭
    扫码关注1秒登录
    发送“验证码”获取 | 15天全站免登陆