Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用docker使用单个mongodb运行多个应用程序_Mongodb_Docker_Docker Compose_Dockerfile - Fatal编程技术网

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

如何使用docker使用单个mongodb运行多个应用程序,mongodb,docker,docker-compose,dockerfile,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

我希望能够在两个容器中运行两个独立的应用程序-每个独立的应用程序一个。然后两个应用程序都应该能够与第三个容器通信,该容器将容纳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)

  • 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中提供路径的方法,我仍然不相信这会奏效

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

    方法#1只需更正Dockerfile即可 路径需要首先替换为文件夹路径

    改正

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

    复制./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
    
    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应用程序1映像

  • App2 Docker映像
  • 转到App2文件夹并创建Dockerfile

    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 8081
    
  • 使用创建docker图像

    docker build-t应用程序1映像

  • 使用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运行应用程序

    docker compose up-d


  • 首先创建docker图像。然后编写docker-compose.yml文件以运行应用程序。而不是建筑。这是很好的做法。非常感谢。它处理图像。我将保留构建版本,在您的回答后稍作调整,以便在编辑js文件时,在我希望实时反映更改的情况下进行日常开发。再次感谢您的回答。您不需要更改构建版本。始终使用最新版本。Kepp通过标记备份每个图像。如果它解决了你的目的,就把它标记为答案