Docker中swarm管理工具

Docker中swarm管理工具

1 安装swarm

swarm是Docker自带的容器集群管理工具。

1.1 集群IP

主机名 ip地址 网卡名 软件
master 192.168.108.201 ens33 Docker
node1 192.168.108.202 ens33 Docker

修改主机名

# 管理节点,修改主机名
hostnamectl set-hostname master

# 子节点,修改主机名
hostnamectl set-hostname node1

# 查看主机名
hostname

1.2 master节点

# 初始化Manager节点的swarm
docker swarm init --advertise-addr 192.168.108.201

# 返回值
Swarm initialized: current node (7jq3yqkt84eoivhnuiubz850m) is now a manager.

To add a worker to this swarm, run the following command:

    docker swarm join --token SWMTKN-1-09b9ti7lmz8bkuzfqy3hqra9g0vrczxkjfynwmrtroy9b4rv47-321reydmf5huvndx4ung11d69 192.168.108.201:2377

To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.

1.3 node1节点

# 将node1节点加入集群
docker swarm join --token SWMTKN-1-09b9ti7lmz8bkuzfqy3hqra9g0vrczxkjfynwmrtroy9b4rv47-321reydmf5huvndx4ung11d69 192.168.108.201:2377

2 Swarm常用命令

2.1 查看节点Token

# 查看工作节点的 token
docker swarm join-token worker

# 查看管理节点的 token
docker swarm join-token manager

2.2 查看集群节点状态

# 查看集群
docker node ls

# 返回值
ID                            HOSTNAME            STATUS              AVAILABILITY        MANAGER STATUS      ENGINE VERSION
7jq3yqkt84eoivhnuiubz850m *   master              Ready               Active              Leader              18.09.6
wt3u2sue87bawx6iytkckvqg0     node1               Ready               Active                                  18.09.6

2.2 管理节点

# 查看node1节点详情
docker node inspect node1

# 将node1节点升级,由工作节点升级为管理节点,node1的MANAGER STATUS变为Reachable
docker node promote node1

# 将node1节点降级,由管理节点降级为工作节点
docker node demote node1

# 更新node1节点
docker node update node1

# 查看当前节点中任务
docker node ps

# 删除node1节点(-f强制删除)
docker node rm node1

2.3 服务管理

1 创建服务

# 在两个节点上获取镜像
docker pull nginx:1.20.0

# 创建3个nginx服务,swarm会自动将容器分配到不同的宿主机上
docker service create --replicas 3 -p 80:80 --name nginx nginx:1.20.0

2 查看服务

# 查看服务
docker service ls

# 查看当前节点中任务
docker node ps

# 查看服务日志
docker service logs nginx

# 查看服务的详情
docker service inspect nginx

3 服务扩容与缩减

# 扩容
docker service scale nginx=5

# 缩减
docker service scale nginx=2

4 删除服务

docker service rm nginx

3 使用overlay网络实现容器跨宿主机互联

推荐使用swarm集群服务,此方法不够灵活,容器被固定在了不同的宿主机中。

3.1 创建overlay网络

# 注意必须添加--attachable参数,否则会报如下错误: docker: Error response from daemon: Could not attach to network overlay-cluster: rpc error: code = PermissionDenied desc = network overlay-cluster not manually attachable.

# --attachable: 表示可以手动挂载容器
docker network create --driver overlay overlay-cluster --attachable

3.2 创建容器

在不同的宿主机上创建alpine容器

# 在master节点上创建容器
docker run -itd --rm --name alpine-master --net overlay-cluster alpine:3.13.0 /bin/sh

# 在node1节点上创建容器
docker run -itd --rm --name alpine-node1 --net overlay-cluster alpine:3.13.0 /bin/sh

3.3 不同宿主机的容器的通信

# 进入master节点上的容器
docker exec -it alpine-master /bin/sh

# ping node1上的alpine-node1
ping alpine-node1

Docker中swarm管理工具_第1张图片

4 Docker Stack大规模部署管理

Docker Stack解决大规模部署管理问题,Docker引擎在1.12 版本集成了Docker Swarm, 内置新的容器编排工具docker stack,通过提供期望状态、滚动升级、简单易用、扩缩容、健康检查等特性简化了应用的管理。

4.1 使用docker-compose创建应用

docker-compose.yml

version: "3.7"
services:
  mysql:
    image: nginx:1.20.0
    hostname: nginx
    networks:
      - overlay
    ports:
      - 80:80
    deploy:
      mode: replicated
      replicas: 3
      
networks:
  overlay:

4.2 常用命令Docker Stack

部署docker-compose文件

# 部署新stack或更新现有stack
# -c 参数指定 compose文件
# stack的名称 nginx-stack
docker stack deploy -c docker-compose.yml nginx-stack

# 返回值
Creating network nginx-stack_overlay
Creating service nginx-stack_mysql

# 此时可以访问80端口的nginx服务
http://192.168.108.201/

nginx截图

Docker中swarm管理工具_第2张图片

查看stack信息

# 显示stack列表
docker stack ls	
# 返回值
NAME                SERVICES            ORCHESTRATOR
nginx-stack         1                   Swarm


# 列出stack中的任务
docker stack ps nginx-stack
# 返回值
ID                  NAME                  IMAGE               NODE                DESIRED STATE       CURRENT STATE           ERROR               PORTS
er6ak0dt6zvi        nginx-stack_mysql.1   nginx:1.20.0        master              Running             Running 2 minutes ago                       
uriohm4ew1gx        nginx-stack_mysql.2   nginx:1.20.0        node1               Running             Running 2 minutes ago                       
fkkqo4dchban        nginx-stack_mysql.3   nginx:1.20.0        node1               Running             Running 2 minutes ago  


# 列出stack中的服务
docker stack services nginx-stack
# 返回值
ID                  NAME                MODE                REPLICAS            IMAGE               PORTS
lasx9zcszyvy        nginx-stack_mysql   replicated          3/3                 nginx:1.20.0        *:80->80/tcp


# 删除stack
docker stack rm nginx-stack
# 返回值
Removing service nginx-stack_mysql
Removing network nginx-stack_overlay
Removing network nginx-stack_nginx-net

你可能感兴趣的:(docker,eureka,java)