配置Docker服务以构建多个映像

时间:2018-07-16 09:45:17

标签: node.js docker docker-compose

我正在试验Docker,并且具有以下文件夹结构:

- mtg2
 - docker-compose.yml (file)
 - mgt-dash (contains angular-cli app)
 - server (contains node/express server)
   - release (contains index.js)

每个子文件夹都有其自己的Dockerfile,而我试图弄清楚如何使用docker-compose.yml文件声明2个服务,以便在我运行docker-compose up时可以构建两个图像。

到目前为止,我的docker-compose.yml文件包含以下内容:

version: '3.1'

services:
    app:
        image: 'mtg-dash'
        build: '.'
        ports:
            - 3000:80

    node:
        image: 'node-server'
        build: '.'
        ports:
            - 4000:80  

Docker文档非常庞大,我不确定从哪里开始。


到目前为止,我已经尝试将两个docker文件从它们各自的文件夹中移出并将它们组合成根中的单个Dockerfile,如下所示:

# For angular app
FROM nginx:alpine

COPY mgt-dash/nginx.conf /etc/nginx/nginx.conf

WORKDIR /usr/share/nginx/html
COPY mgt-dash/dist/mgt-dash .


# For node express server
FROM node:8
# Create app directory
WORKDIR /usr/src/app/release

# Install app dependencies
# A wildcard is used to ensure both package.json AND package-lock.json are copied
# where available (npm@5+)
COPY server/package*.json ./

RUN npm install
# If you are building your code for production
# RUN npm install --only=production

# Bundle app source
COPY . .

EXPOSE 4000
CMD [ "npm", "start" ]

使用此配置,角度应用程序(有时)可以正常运行并且可以按预期在端口3000上运行,但是端口4000上的节点服务器不起作用,运行{{ 1}}:

  

错误:找不到模块'/usr/src/app/release/index.js'

完整的终端输出可以在here

中找到

如果我正确理解这是因为docker无法找到运行服务器的docker-compose up文件。

所以我的问题是如何设置它,以便在我运行index.js时可以生成两个图像?还是我这样做完全错误?


我应该注意,我正在Windows 10上使用最新版本的Docker和节点docker-compose up

1 个答案:

答案 0 :(得分:2)

您可以更改applicationHost.config文件,以使用每个文件夹中的docker-compose进行构建:

Dockerfile