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

时间:2017-07-23 07:05:06

标签: node.js nginx 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个单独的实例?

同样对于数据库链接我正在使用--link标志,但在文档中显示为折旧,有什么方法可以解决这个问题?

1 个答案:

答案 0 :(得分:1)

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

然后,您可以使用service constrains声明数据库,以便所述基地始终在同一节点上运行。

请参阅“Running a MongoDB Replica Set on Docker 1.12 Swarm Mode: Step by Step”:

  

基本计划是将副本集的每个成员定义为单独的服务,并使用约束来防止swarm orchestration将它们从数据卷中移开

例如:

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