swarm安装使用(二)

部署使用

shell 复制代码
# 重新初始化集群,都要操作
root@133:~# systemctl stop docker
root@133:~# rm -rf /var/lib/docker/swarm/
root@133:~# docker swarm init --advertise-addr 10.1.0.133 --default-addr-pool 192.20.0.0/16

root@133:~# docker swarm join-token manager
    docker swarm join --token SWMTKN-1-54wnqxi04uwboi3h 10.1.0.133:2377

root@133:~# docker network create -d overlay --subnet=192.20.100.0/24 --attachable my_external_network

root@133:~# docker node ls
ID                            HOSTNAME   STATUS    AVAILABILITY   MANAGER STATUS   ENGINE VERSION
zbag3oxp2jlkv7f8xdintn7kr *   133        Ready     Active         Leader           27.5.1
vglj81ajcdco23d3995rgrm7t     134        Ready     Active         Reachable        27.5.1

使用yaml部署

创建时,服务名生成格式 {默认stack名}_{service名}

shell 复制代码
root@133:~# cat nginx1.yaml
services:
  app:
    image: nginx
    deploy:
      replicas: 2
      resources:
        limits:
          cpus: '0.5'
          memory: 512M
      update_config:
        parallelism: 1
        delay: 10s
        failure_action: pause
        order: start-first
    ports:
      - "18080:80"
    networks:
      - my_external_network
networks:
  my_external_network:
    external: true

root@133:~# docker stack deploy -d -c nginx1.yaml web1
Creating service web1_app

root@133:~# docker service ls
ID             NAME       MODE         REPLICAS   IMAGE          PORTS
gwkltslf7f3b   web1_app   replicated   2/2        nginx:latest   *:18080->80/tcp
root@133:~# docker service ps web1_app
ID             NAME         IMAGE          NODE      DESIRED STATE   CURRENT STATE                ERROR     PORTS
31o7nridvy4a   web1_app.1   nginx:latest   134       Running         Running about a minute ago
d4ixryj367fr   web1_app.2   nginx:latest   135       Running         Running 2 minutes ago

yaml示例2

shell 复制代码
root@133:~# cat nginx2.yaml
services:
  app:
    image: nginx
    ports:
      - "28080:80"
    volumes:
      - /mnt/test1:/usr/share/nginx/html
    environment:
      REGISTRY_AUTH: swr.cn-south-1.myhuaweicloud.com
    extra_hosts:
      - "www.byd.com:10.1.0.133"
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost"]
      interval: 1m
      timeout: 10s
      retries: 3
      start_period: 40s
    deploy:
      replicas: 2
      resources:
        limits:
          cpus: '0.5'
          memory: 512M
      update_config:
        parallelism: 1
        delay: 10s
        failure_action: pause
        order: start-first
    networks:
      - my_external_network
networks:
  my_external_network:
    external: true

root@133:~# docker service rm web2_app
web2_app
root@133:~# docker stack deploy -d -c nginx2.yaml web2
Creating service web2_app

# 创建时,服务名生成格式 {默认stack名}_{service名}    
oot@133:~# docker service  ls
ID             NAME       MODE         REPLICAS   IMAGE          PORTS
66lf32uudp9a   web2_app   replicated   0/2        nginx:latest   *:28080->80/tcp

多次启动失败后,容器会自动更换节点

shell 复制代码
# 因为134为创建 /mnt/test1/目录,挂载报错,不会自动创建
root@133:~# docker service ps web2_app
ID             NAME             IMAGE          NODE      DESIRED STATE   CURRENT STATE            ERROR                              PORTS
03p2wi6zg0c3   web2_app.1       nginx:latest   134       Ready           Rejected 2 seconds ago   "invalid mount config for type..."
9kowjgozomx5    \_ web2_app.1   nginx:latest   134       Shutdown        Rejected 4 seconds ago   "invalid mount config for type..."
3trn5wt9jqh3    \_ web2_app.1   nginx:latest   134       Shutdown        Rejected 8 seconds ago   "invalid mount config for type..."
trswjoslzxa4   web2_app.2       nginx:latest   133       Running         Starting 8 seconds ago

#  多次启动失败后,容器会更换节点,都分配到 133上
root@133:~# docker service ps web2_app
ID             NAME             IMAGE          NODE      DESIRED STATE   CURRENT STATE                 ERROR                              PORTS
mgvsz863nfv8   web2_app.1       nginx:latest   133       Running         Running 38 seconds ago
txs2hqws5sbn    \_ web2_app.1   nginx:latest   134       Shutdown        Rejected 58 seconds ago       "invalid mount config for type..."
o55vll7x0jss    \_ web2_app.1   nginx:latest   134       Shutdown        Rejected about a minute ago   "invalid mount config for type..."
03p2wi6zg0c3    \_ web2_app.1   nginx:latest   134       Shutdown        Rejected about a minute ago   "invalid mount config for type..."
9kowjgozomx5    \_ web2_app.1   nginx:latest   134       Shutdown        Rejected about a minute ago   "invalid mount config for type..."
trswjoslzxa4   web2_app.2       nginx:latest   133       Running         Running 59 seconds ago

网络访问

shell 复制代码
root@133:~# docker ps |grep 28080 #不显示的
root@133:~# curl localhost:28080
hello test1
root@133:~# curl 10.1.0.134:28080
hello test1

历史版本保存与清理

shell 复制代码
# 更新镜像,旧的镜像会以Exited存在,这里测试,默认保留了五个,暂时没查到保留的参数

root@133:~# docker service update --image nginx:1.23 web2_app && sleep 60  &&docker service update --image nginx:1.26 web2_app && sleep 60  &&docker service update --image nginx web2_app && sleep 60  &&docker service update --image nginx:1.23 web2_app && sleep 60  &&docker service update --image nginx:1.26 web2_app  

root@133:~# docker service ps web2_app
ID             NAME             IMAGE          NODE      DESIRED STATE   CURRENT STATE                 ERROR     PORTS
1dnb40jxzky6   web2_app.1       nginx:1.26     134       Running         Running 9 seconds ago
93hoteglj1sm    \_ web2_app.1   nginx:1.23     133       Shutdown        Shutdown 5 seconds ago
5hscgdeil95q    \_ web2_app.1   nginx:latest   134       Shutdown        Shutdown about a minute ago
vj8kj75hzam7    \_ web2_app.1   nginx:1.26     133       Shutdown        Shutdown 3 minutes ago
7w14gdzd5b4b    \_ web2_app.1   nginx:1.23     134       Shutdown        Shutdown 4 minutes ago
jxqxp01d7b2y   web2_app.2       nginx:1.26     133       Running         Running 13 seconds ago
ald0fmrvggz2    \_ web2_app.2   nginx:1.23     134       Shutdown        Shutdown 9 seconds ago
maneh2cnvxl7    \_ web2_app.2   nginx:latest   133       Shutdown        Shutdown about a minute ago
ue9g2zqqswcu    \_ web2_app.2   nginx:1.26     134       Shutdown        Shutdown 3 minutes ago
vvj1m67dzlvj    \_ web2_app.2   nginx:1.23     133       Shutdown        Shutdown 4 minutes ago

#  存在5个 Exited容器,多出的会自动清理
root@133:~# docker ps -a
CONTAINER ID   IMAGE                    COMMAND                  CREATED          STATUS                          PORTS     NAMES
c238cad11bf4   nginx:1.26               "/docker-entrypoint...."   32 seconds ago   Up 31 seconds (healthy)         80/tcp    web2_app.2.jxqxp01d7b2y6vvb0cw9rjxvt
939ee7483272   nginx:1.23               "/docker-entrypoint...."   2 minutes ago    Exited (0) 15 seconds ago                 web2_app.1.93hoteglj1sm7dvzpfbbg3a2z
650bde520b70   nginx:latest             "/docker-entrypoint...."   3 minutes ago    Exited (0) About a minute ago             web2_app.2.maneh2cnvxl7iwtx4gmfbbp7a
850814416f72   nginx:1.26               "/docker-entrypoint...."   5 minutes ago    Exited (0) 3 minutes ago                  web2_app.1.vj8kj75hzam7w7eo0xgs98e02
fb40fba69ecf   nginx:1.23               "/docker-entrypoint...."   6 minutes ago    Exited (0) 5 minutes ago                  web2_app.2.vvj1m67dzlvjn6nix7v5kt59t

#  直接删除stack会清理相关的 Exited容器
root@133:~# docker service rm web2_app
web2_app
root@133:~# docker ps -a |grep web2_app # 会自动删除
shell 复制代码
##   拉取私有镜像 --with-registry-auth
root@133:~# docker service update --image  my.docker.com/ubuntu:22.04ssh --with-registry-auth web2_app

portainer-ce管理工具使用

shell 复制代码
portainer/portainer-ce:2.33.2
portainer/agent:2.33.2

root@133:~# docker run -d -p 9000:9000   --name portainer --restart=always   -v /var/run/docker.sock:/var/run/docker.sock -v ./portainer_data:/data  portainer/portainer-ce:2.33.2

docker service create \
  --name portainer_agent \
  --network my_external_network \
  -p 9001:9001/tcp \
  --mode global \
  --constraint 'node.platform.os == linux' \
  --mount type=bind,src=//var/run/docker.sock,dst=/var/run/docker.sock \
  --mount type=bind,src=//var/lib/docker/volumes,dst=/var/lib/docker/volumes \
  --mount type=bind,src=//,dst=/host \
  portainer/agent:2.33.2
  
在Environment-related选项  add Environment -->docker swarm --start wizard--> agent/api-2375访问,也可portainer/agent。
添加多个2375时,多swarm集群,在home页可以看到多个swarm集群
相关推荐
daydayup95272 小时前
swarm安装使用(一)
docker·云原生·容器
阿里云云原生3 小时前
替换一个节点,让 ComfyUI 瞬间起飞
云原生
Lee_SmallNorth3 小时前
docker-compose脚本一键部署 rocketmq + rocketmq-dashboard
docker·容器·rocketmq
没有bug.的程序员4 小时前
CI/CD 流水线的物理级崩塌:Spring Boot 镜像从 1.2G 暴降至 200M 的 Docker 底层大重构
java·spring boot·ci/cd·docker·重构
lbb 小魔仙4 小时前
Portainer 实战:可视化管理 Docker并实现外网访问
运维·docker·容器
小陈工5 小时前
Docker容器化部署Python应用——从开发到生产的全流程
运维·开发语言·python·docker·云原生·容器·数据挖掘
灰阳阳5 小时前
Docker实践-阿里云上创建私有仓库
阿里云·docker·容器
阿里云云原生5 小时前
让 OpenClaw 受控运行: SLS 一键接入与审计
阿里云·云原生·sls·openclaw
xcLeigh5 小时前
告别 Excel 繁琐操作!Metabase让数据可视化触手可及
mysql·docker·信息可视化·excel·数据可视化·metabase·cpolar