Spring Cloud Alibaba-Swarm(二十七)

409 阅读2分钟

创建

# 启动Manager节点
docker swarm init --advertise-addr=ip

# 添加worker(另一个docker中运行,成功提示This node joined a swarm as a worker.)
docker swarm join --token SWMTKN-1-43yyxfb3b0cc64vzy7t8pvxulizm3p9v5kr83su66bbbph7e77-clv5mylfl2z9dnouxm659jnt7 192.168.205.10:2377
# 查询节点
docker node ls
# 创建网络
docker network create -d overlay test
# 查看网络
docker network ls
# 创建服务
docker service create --name test --replicas 2 --network test  busybox sh -c "while true;do sleep3600;done"

worker2中将没有test网络,manager和worker1有

# 拓展服务,docker rm -f 容器id删除后,会自动创建一个保证有5个
docker service scale test=5
# 查询服务
docker service ps test
# 删除服务
docker service rm test

集群服务间通信

  • Internal:Container和Container之间通过overlay网络进行通信
  • Ingress:如果有服务绑定接口,则此服务可以通过任意swarm节点的相应接口访问
    请求的大致过程:通过服务名请求->DNS解析->转化为VIP->路由转发和负载均衡->某个服务进行响应

Docker Stack

官方docker-compose.yml说明文档

version: '3'

services:
  # 服务name
  web:
    # 服务Image
    image: wordpress
    # 端口映射
    ports:
      - 8080:80
    # 环境变量
    environment:
      WORDPRESS_DB_HOST: mysql
      WORDPRESS_DB_PASSWORD: root
    # 指定网络
    networks:
      - my-network
    # 指定数据库
    depends_on:
      - mysql
    deploy:
      # 指定服务个数
      mode: replicated
      replicas: 3
      # 重启策略:
      restart_policy:
        # 失败的情况下
        condition: on-failure
        # 重新启动尝试之间等待的时间
        delay: 5s
        # 第一次尝试重启失败,则可能会尝试三次以上重启
        max_attempts: 3
        # 决定重新启动是否成功之前要等待的时间
        window: 120s
      update_config:
        # 一次更新的容器数
        parallelism: 1
        # 在更新一组容器之间等待的时间
        delay: 10s

  mysql:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: wordpress
    # 数据卷
    volumes:
      - mysql-data:/var/lib/mysql
    networks:
      - my-network
    deploy:
      mode: global
      placement:
        constraints:
          # 在manager节点运行
          - node.role == manager
visualizer:
    image: dockersamples/visualizer:stable
    ports:
      - "8081:8080"
    stop_grace_period: 1m30s
    volumes:
      - "/var/run/docker.sock:/var/run/docker.sock"
    deploy:
      placement:
        constraints: [node.role == manager]
        
volumes:
  mysql-data:

networks:
  my-network:
    driver: overlay
# 运行
docker stack deploy wordpress --compose-file=docker-compose.yml
# 查看服务
docker stack services wordpress
# 删除服务
docker stack rm wordpress

Docker Secret

概念

存在Swarm Manager节点的Raft database里,通过assign给一个sevice,使其可以看到

方式

  • 命令
# 内容为明文密码
vim password
# 创建secret
docker secret create my-pw password
# 查看
docker secret ls
# 运行
docker service create --name mysql1 --secret my-pw -e MYSQL_ROOT_PASSWORD_FILE=/run/secrets/my-pw mysql
# 进入容器内部
docker exec -it 9468004ddab5 sh
# 到指定目录
cd /run/secrets/
# 查看密码
more my-pw
  • yml(通过这种方式避免明文直接暴露)
...
    secrets:
      - my-pw
    environment:
      WORDPRESS_DB_HOST: mysql
      WORDPRESS_DB_PASSWORD_FILE: /run/secrets/my-pw
...