为以下应用程序结构编写docker的正确方法是什么?

我在nodejs上运行了3个nodejs微服务。 其中一个运行在一个单独的子域中,另外两个基于路径进行路由。 我的Docker文件如下

FROM node:latest RUN mkdir -p /usr/src/app WORKDIR /usr/src/app COPY package.json /usr/src/app/ RUN npm install COPY . /usr/src/app EXPOSE 9000 CMD [ "npm", "start" ] 

每个图像的端口是不同的。 在此之后,我有一个nginx运行裸机服务器上的所有配置反向代理服务器。 我知道这不是最好的方式。 我怎样才能有3个单独的实例运行,并在同一端口上侦听?

另外对于我正在使用的数据库链接 – 链接标志,但显示为在文档中折旧,什么是正确的方式来解决这个问题?

使用Traefik代替NGiNX :它将根据通过领事发现的容器来调整其反向代理规则。
请参阅“ Traefik群集 ”以设置群集。

然后,您可以声明数据库,以便使用服务约束 ,可以使基础始终在同一节点上运行。

请参阅“ 在Docker 1.12群集模式下逐步运行MongoDB副本集 ”:

基本计划是将副本集的每个成员定义为一个单独的服务,并使用约束来防止群集编排将其从数据卷移开

例如:

 docker@manager1:~$ docker node update --label-add mongo.replica=1 $(docker node ls -q -f name=manager1) docker service create --replicas 1 --network mongo \ --mount type=volume,source=mongodata1,target=/data/db \ --mount type=volume,source=mongoconfig1,target=/data/configdb \ --constraint 'node.labels.mongo.replica == 1' \ --name mongo1 mongo:3.2 mongod --replSet example