docker swarm

docker swarm

有错或者有更好的见解欢迎指出。本人还是学生,在后续,深入理解后,还会继续更新这篇文章。

对于网络底层的理解,这块是个难点,这篇文章还没有作讨论。

搭建 docker swarm集群

docker swarm init --advertise-addr=ip
# --advertise-addr指定广播地址。即用来与其他节点通信的IP,默认端口为2377.如果主机上有多个网卡,需要指定。

在leader上查看token

docker swarm join-token manager
docker swarm join-token worker

加入集群成为manager/worker

docker swarm join --token SWMTKN-1-3edcx30eosroclc3hi4jmay8ngfqplf573jfsj6zf9a663axmx-9kngyj7dxaov080nsl7ymmpog 192.168.201.145:2377

# 如果主机有多个网卡,则还是需要指定广播地址
docker swarm join --advertise-addr=IP \
--token SWMTKN-1-3edcx30eosroclc3hi4jmay8ngfqplf573jfsj6zf9a663axmx-9kngyj7dxaov080nsl7ymmpog \
192.168.201.145:2377
# 查看各个节点
docker node ls

集群的解散

分为两步操作,首先在想要退出的节点上离开集群,然后在manager节点上删除退出节点的信息(不删除,则无法再次加入)。

# 系欸但退出集群,manager节点退出时,需要加--force
docker swarm leave [--force] 

# 退出后需在manager节点删除退出的节点
docker node rm 退出节点的主机名

节点管理

查看集群节点

docker node ls

节点升级和降级

# 升级为manager
docker node promote 主机名
# 降级为worker
docker node demote 主机名

节点下线

节点暂停接受任务

docker node update --availability drain 主机名

节点上线

节点重新接受任务

docker node update --availability active 主机名

服务管理

image-20240818154645019

容器的创建:

docker service create [-d --name ...]

水平扩展/弹性伸缩

即如何更改副本的数量

# 方式一
docker service  scale servicename=n
# 方式二
docker service update --replicas 新副本数 服务名

滚动更新

滚动更新即在不停止服务的情况下更新服务,也成为灰度更新。

docker service update --image 基础镜像 --update-delay 时间间隔 --update-parallelism 定义并行更新的最大数量 服务名 

Visualizer可视化工具

Visualizer非常直观地显示了Swarm集群中,服务器的状态和服务器上面运行容器的状态。

# 在docker swarm中运行
docker service create \
  --name=viz \
  --publish=80:8080/tcp \
  --constraint=node.role==manager \
  --mount=type=bind,src=/var/run/docker.sock,dst=/var/run/docker.sock \
 dockersamples/visualizer

删除服务

docker service rm servicename

docker stack 部署

swarm堆栈的管理工具,可以解和docker-compose 实现多service应用程序的部署。

详细请看:https://docs.docker.com/compose/compose-file/deploy/#attributes

docker-compose.yml中有关swarm集群的属性

某个service:
  deploy:
    replicas: 2
    mode: replicated(默认) | global
    placement:
      - "node.id==nodeid"				#根据节点id
      - "node.hostname==nodehostname" #根据节点主机名
    restart_policy:   #指定服务部署的重启策略
      condition: none | on-failure    #none不重启,on-failure为容器故障时重启
      delay: 10s     #尝试重启的时间间隔(默认5s)
      max_attempts: 3  #最多的尝试次数(默认无限制)

说明: docker-compose up方式会默认忽略deploy部分

常用命令

docker stack deploy  -c "yaml文件" stackname
docker stack ls
docker stack ps  stackname
docker stack down/rm/remove stackname

实战–部署mysql+wordpress

docker-compose.yml文件:

version: '3.8'

services:
  db:
    image: mysql:5.7
    container_name: mysql_db
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: wordpress
      MYSQL_USER: chen
      MYSQL_PASSWORD: root
    volumes:
      - db_data:/var/lib/mysql
    networks:
      - wp_network
         

  wordpress:
    image: wordpress:latest 
    container_name: wordpress
    restart: always
    ports:
      - "80:80"
    environment:
      WORDPRESS_DB_HOST: db:3306
      WORDPRESS_DB_NAME: wordpress
      WORDPRESS_DB_USER: chen
      WORDPRESS_DB_PASSWORD: root
    volumes:
      - wordpress_data:/var/www/html
    networks:
      - wp_network
    deploy:
       replicas: 2
       mode: replicated

volumes:
  db_data:
  wordpress_data:

networks:
  wp_network:
docker stack deploy -c docker-compose.yml wordpress

访问本机80端口,成功

  • 11
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值