mongodb - 如何使用Docker使用单个mongodb运行多个应用程序

标签 mongodb docker docker-compose dockerfile

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

  • 我的本地计算机上的文件夹结构
    /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)
    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
    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:没有这样的文件或目录

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

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

    最佳答案

    方法#1只需更正您的Dockerfile

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

    用纠正

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

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



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

    方法#2部署应用程序的良好实践

    App1 Docker镜像
  • 转到您的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
    
  • 使用以下命令创建docker镜像

    docker build -t app1Image .


  • App2 Docker镜像
  • 转到您的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
    
  • 使用以下命令创建docker镜像

    docker build -t app1Image .


  • 使用compose部署镜像
  • 在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
    
  • 带有docker-compose的
  • RUN App

    docker-compose up -d
  • 关于mongodb - 如何使用Docker使用单个mongodb运行多个应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48841261/

    相关文章:

    python - 即将到来的 MongoEngine 生日

    linux - 收到以下错误 : 13279:can't find self in the replset config when configuring replica sets

    docker - Dockerhub:列出给定镜像的所有可用版本?

    spring-boot - 如何将 Web 应用程序文件夹加载到 docker 容器

    docker - 如何在单个容器中运行两个Docker镜像?

    mongodb - "db.createUser is not a function"和 "password can' 为空”

    mongodb - 如何在中断后重新启动/恢复mongodb中的copydb()?

    linux - 如何在 linux 主机上运行 windows docker 容器?

    node.js - 无法使用 docker-compose 在 docker 容器中运行命令

    php - Apache docker 容器 - 无效命令 'RewriteEngine'