如何使用docker

时间:2018-02-17 12:28:41

标签: mongodb docker docker-compose dockerfile

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

  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. 搬运工-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"
    
  4. 几个问题: 以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 个答案:

答案 0 :(得分:1)

方法#1只需更正您的Dockerfile

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

更正
  

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

     

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

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

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

App1 Docker Image

  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 build -t app1Image。

  3. App2 Docker Image

    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 build -t app1Image。

    3. 使用撰写

      部署图像
      1. 在Dev文件夹

        中创建docker-compose.yml

        <强>搬运工-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