0

我正在使用这个库:

https://github.com/jwilder/nginx-proxy

这是我的 docker-compose 文件:

version: '2'
services:
  nginx-proxy:
    image: jwilder/nginx-proxy
    container_name: nginx-proxy
    ports:
      - "80:80"
    volumes:
      - /var/run/docker.sock:/tmp/docker.sock:ro

  whoami:
    image: jwilder/whoami
    environment:
      - VIRTUAL_HOST=whoami.local
  service1:
    image: mynode:1.4
    build: .
    volumes:
        - .:/app
    restart: always
    environment:
      - VIRTUAL_HOST=service1.local
  service2:
    image: mynodeother:1.3
    build: .
    volumes:
        - .:/app
    restart: always
    environment:
      - VIRTUAL_HOST=service2.local

我添加了 2 个新的节点服务...

我可以这样做:curl -H "Host: service2.local" localhost并得到 service2 的响应......

问题是我从中获得了什么好处?以及如何在 80 端口上运行 service1?

这是Dockerfile来自服务1:

FROM node:6.9.4

# Create app directory
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app

RUN npm install nodemon -g

# Install app dependencies
COPY package.json /usr/src/app/
RUN npm install

# Bundle app source
COPY . /usr/src/app

EXPOSE 8080
CMD [ "npm", "start" ]
4

1 回答 1

0

这很简单,您只需在 80 端口中运行所有服务并在 Dockerfile 中公开该端口即可。

只要您不将该端口发布到您的主机(就像您使用 nginx 一样),就没有问题。

优点是您拥有的每个服务都可以通过使用主机名来访问另一个服务,这意味着容器的名称,这很酷,因为您不需要知道分配给每个容器的当前 IP 地址。

因此,如果您使用其中一项服务,bash或者sh您应该能够使用主机名 ping 其他服务:

内部服务1: ping service2

好处nginx-proxy是它会检测你是否扩展你的服务之一,它会自动更新 nginx 配置:

docker-compose scale service1=3

我将启动您的 service1 的另外 2 个实例,无论您是否有 100 个,其余服务都可以使用主机名访问它们:service1。

因此,您可以平衡负载,而无需担心同一服务的每个实例的 IP 地址。

于 2017-04-18T23:29:10.203 回答