Docker Swarm 服务集群
Docker Swarm Service Clustering
我想使用 docker-compose 和 Docker Swarm(我使用 docker 1.13 版并使用 version: '3'
语法组合)。
每个服务是否可以作为其他服务的 "single" 服务访问?这里有一个简单的例子要清楚:
version: '3'
services:
nodejs:
image: mynodeapp
container_name: my_app
ports:
- "80:8080"
environment:
- REDIS_HOST=my_redis
- REDIS_PORT=6379
deploy:
mode: replicated
replicas: 3
networks:
- my_net
command: npm start
redis:
image: redis
container_name: my_redis
restart: always
expose:
- 6379
deploy:
mode: replicated
replicas: 2
networks:
- my_net
networks:
my_net:
external: true
假设我有 3 个 VM,它们被配置为 swarm。所以每个虚拟机上有一个 nodejs 容器 运行 但只有两个 redis 容器。
在没有 redis的VM上运行:我的nodejs容器会知道redis吗?
其他问题:
当我为我的 redis 设置 replicas: 4
时,我将在 one VM 上有 two redis 容器:这对我的 nodejs 来说是个问题吗应用程序?
最后一题:
当我为我的 nodeapp 设置 replicas: 4
时:这是否有效,因为我现在已经暴露了 两次 端口 80?
按照你问的顺序:
- 一个服务看不到另一个服务,就好像它是由副本组成的一样。 Nodejs 会看到一个唯一的 Redis,它有一个 IP,无论它的副本位于哪个节点。这就是 Swarm 的魅力。
- 是的,您可以在一个节点中使用 Nodejs,在另一个节点中使用 Redis,并且它们将相互可见。这就是经理所做的;使容器 "believe" 它们在同一台机器上 运行。
- 此外,您可以在同一个节点中拥有多个副本而不会出现问题;他们将被视为一个整体。事实上,他们使用相同的音量。
- 最后,正如(1)的暗示,不会有问题,因为你实际上并没有暴露80端口两次。即使有 20 个副本,您也有一个独特的服务入口点,一个特定的 IP:PORT 方向。
服务必须是无状态的。对于数据库,有必要在每个实例中设置集群模式,因为它们是有状态的。
我想使用 docker-compose 和 Docker Swarm(我使用 docker 1.13 版并使用 version: '3'
语法组合)。
每个服务是否可以作为其他服务的 "single" 服务访问?这里有一个简单的例子要清楚:
version: '3'
services:
nodejs:
image: mynodeapp
container_name: my_app
ports:
- "80:8080"
environment:
- REDIS_HOST=my_redis
- REDIS_PORT=6379
deploy:
mode: replicated
replicas: 3
networks:
- my_net
command: npm start
redis:
image: redis
container_name: my_redis
restart: always
expose:
- 6379
deploy:
mode: replicated
replicas: 2
networks:
- my_net
networks:
my_net:
external: true
假设我有 3 个 VM,它们被配置为 swarm。所以每个虚拟机上有一个 nodejs 容器 运行 但只有两个 redis 容器。
在没有 redis的VM上运行:我的nodejs容器会知道redis吗?
其他问题:
当我为我的 redis 设置 replicas: 4
时,我将在 one VM 上有 two redis 容器:这对我的 nodejs 来说是个问题吗应用程序?
最后一题:
当我为我的 nodeapp 设置 replicas: 4
时:这是否有效,因为我现在已经暴露了 两次 端口 80?
按照你问的顺序:
- 一个服务看不到另一个服务,就好像它是由副本组成的一样。 Nodejs 会看到一个唯一的 Redis,它有一个 IP,无论它的副本位于哪个节点。这就是 Swarm 的魅力。
- 是的,您可以在一个节点中使用 Nodejs,在另一个节点中使用 Redis,并且它们将相互可见。这就是经理所做的;使容器 "believe" 它们在同一台机器上 运行。
- 此外,您可以在同一个节点中拥有多个副本而不会出现问题;他们将被视为一个整体。事实上,他们使用相同的音量。
- 最后,正如(1)的暗示,不会有问题,因为你实际上并没有暴露80端口两次。即使有 20 个副本,您也有一个独特的服务入口点,一个特定的 IP:PORT 方向。
服务必须是无状态的。对于数据库,有必要在每个实例中设置集群模式,因为它们是有状态的。