使用swarm组织集群

发布于:2024-04-26 ⋅ 阅读:(160) ⋅ 点赞:(0)

swarm init 创建集群

然后会打印出 swarm join ,在另一台机器上输入
查看集群

docker node ls

解散集群 swarm node leave --forece

部署

# 创建网络
docker network create  --driver=overlay --subnet=10.110.1.0/24 blocknet
docker stack deploy -c docker-compose.yml mystack

docker-compose.yml 如下

version: '3'
services:
  supervisor:
    image: emulator:latest
    cap_add:
      - NET_ADMIN
    deploy:
      placement:
        constraints:
          - node.id == ex1gf143dc9cvvd778fzca6os
    volumes: 
      - /home/rkzhang/image/emulator_mount:/root/emulator_mount
    ports:
      - "52100:22"
    networks:
      - blocknet 
  node0:
    image: emulator:latest
    cap_add:
      - NET_ADMIN
    deploy:
      placement:
        constraints:
          - node.id == 9yypexmyozsgaayzw38ntkahm
    volumes:
      - /home/dd/emulator_mount:/root/emulator_mount
    ports:
      - "50000:22"
    networks:
      - blocknet 

  node1:
    image: emulator:latest
    cap_add:
      - NET_ADMIN
    deploy:
      placement:
        constraints:
          - node.id == ex1gf143dc9cvvd778fzca6os
    volumes:
      - /home/rkzhang/image/emulator_mount:/root/emulator_mount
    ports:
      - "50001:22"
    networks:
      - blocknet 
  
networks:
  blocknet:
    external: true
    name: blocknet

docker service ls

hostname 和 servicename 不一致

在docker network inspect 命令中可以查看每个容器的ip(如果指定了ip网段)

但是使用 ip addr show 和 dig dns解析出来的ip 不一致,是因为使用了 vip 通信。

可以使用 tasks.<service-name> ,这样解析出来 service-name的ip就是容器的 ip addr show的ip 也和docker network inspect中的ip一致