欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

docker-swarm单节点模式

程序员文章站 2022-03-27 08:41:04
...

阅读本文前,请确保已经正确容器化一台机器并且能够使用docker-compose部署容器。如果没有,请参考编排文件

一个swarm集群中有两种节点,manager节点和worker节点。一个容器化的机器(可以是物理机器,也可以是虚拟机器)可以升级为一个swarm节点。所谓swarm单节点模式,就是swarm集群中只有一个manager节点。

为什么要把一个普通的容器化机器升级为一个swarm节点呢?

  • 普通容器化机器只有image和container概念,而swarm节点引入stack、service和task概念,可以更方便地创建、规模化和管理容器,也能方便地做负载均衡。
    docker-swarm单节点模式
  • 升级为swarm节点之后,能够和其他容器化机器一起组成swarm集群,跨节点进行管理。
//首先确保机器已经容器化,使用docker-machine创建或者Docker Desktop for **安装。
//将机器升级为swarm管理节点。
docker swarm init		//成功执行后,机器即升级为manager节点
//执行这句话之后可以得到一个token,后续凭借token和地址可以加入到集群中
docker swarm join --token ****** --listen-addr **
//如果忘记token,可以使用以下命令查询:
docker swarm join-token manager //加入管理节点token
docker swarm join-token worker //加入工作节点token
//管理节点的集群连接ip端口可以通过命令查询:
docker info

通过上述步骤,可以把一个容器化机器升级为一个swarm节点。
然后参考docker-compose文件的语法编写部署配置文件,以下是参考

//服务之间可以通过服务名来访问,无需links参数链接容器
version: "3.7"
networks:
  xxl:
    driver: overlay		//创建overlay网络
    ipam:
      driver: default
      config:
        - subnet: 172.18.0.0/16
services:
  nginx:
    image: nginx		//只能通过镜像来创建,不支持build参数
    networks:
      - xxl
    ports:
      - "0.0.0.0:80:80"
      - "0.0.0.0:443:443"
    volumes:
      - "./nginx/nginx.conf:/etc/nginx/nginx.conf:ro"
      - "./dist:/dist:ro"
    deploy:		//关键还是这个deploy参数,可以仔细看看
      replicas: 1
      placement:
        constraints:
          - node.role== manager
  redis:
    image: redis
    networks:
      - xxl
    ports:
      - "0.0.0.0:6379:6379"
    volumes:
      - "./redis/redis.conf:/etc/redis/redis.conf:ro"
      - "./redis:/data:rw"
    command: redis-server /etc/redis/redis.conf
    deploy:
      replicas: 1
      placement:
        constraints:
          - node.role == manager
  mysql:
    image: xxl-mysql
    networks:
      - xxl
    ports:
      - "0.0.0.0:33060:3306"
    volumes:
      - "./mysql:/var/lib/mysql:rw"
    deploy:
      replicas: 1
      placement:
        constraints:
          - node.role == manager
  rabbitmq:
    image: xxl-rabbitmq
    networks:
      - xxl
    ports:
      - "0.0.0.0:15672:15672"
      - "0.0.0.0:1883:1883"
    deploy:
      replicas: 1
      placement:
        constraints:
          - node.role == manager
  nexus:
    image: sonatype/nexus3
    networks:
      - xxl
    ports:
      - "0.0.0.0:8081:8081"
    volumes:
      - "./nexus:/nexus-data:rw"
    deploy:
      replicas: 1
      placement:
        constraints:
          - node.role == manager
  portainer:		//用于查看集群情况
    image: portainer/portainer
    networks:
      - xxl
    ports:
      - "0.0.0.0:8082:9000"
    volumes:
      - "/var/run/docker.sock:/var/run/docker.sock"
    deploy:
      replicas: 1
      placement:
        constraints:
          - node.role == manager

然后使用yml文件来创建容器,任务,服务和堆栈

//按照配置文件创建名为xxl的stack
docker stack deploy -c .\docker-compose.yml xxl
//移除名称为xxl的stack
docker stack rm xxl

由于服务中加入了portainer,可以访问http://localhost:8082/#/home查看集群的情况
docker-swarm单节点模式
至此,容器化机器+docker-compose部署升级为swarn单节点模式成功。这样,就不需要额外安装docker-compose了。

相关标签: 运维 docker