企业级容器技术docker(12)docker swarm

本文详细介绍了如何使用Docker Compose文件在Docker Swarm集群中部署和管理服务,包括Nginx和Httpd服务的部署、资源限制设置、服务更新策略以及可视化监控的实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

docker srack部署
写一个compose文件

version: '3'
services:

  web1:
    image: passyt.com/library/nginx
    ports:
      - "80:80"
    volumes:
      - web-data:/usr/share/nginx/html
    networks:
      - my_net
    deploy:
      replicas: 3
volumes:
    web-data:

networks:
  my_net:

使用命令进行部署

docker stack deploy -c docker-compose.yml my_cluster
Creating network my_cluster_my_net
Creating service my_cluster_web1

部署完成可以进行查看

docker stack services my_cluster 

ID                  NAME                MODE                REPLICAS            IMAGE                             PORTS
xushxic7xzgp        my_cluster_web1     replicated          3/3                 passyt.com/library/nginx:latest   *:80->80/tcp

这样就已经完成部署。

如果想要进行拉伸操作,也是只用修改文件里面的参数再运行一边就行了。

replicas: 6

docker service ps my_cluster_web1 
ID                  NAME                IMAGE                             NODE                DESIRED STATE       CURRENT STATE                    ERROR               PORTS
xb8xpocp2p4b        my_cluster_web1.1   passyt.com/library/nginx:latest   server1             Running             Running 4 minutes ago                                
37uotbf3rfj9        my_cluster_web1.2   passyt.com/library/nginx:latest   passyt.com          Running             Running 4 minutes ago                                
opiddn1x83ef        my_cluster_web1.3   passyt.com/library/nginx:latest   server3             Running             Running 4 minutes ago                                
ty6endwithlq        my_cluster_web1.4   passyt.com/library/nginx:latest   server1             Running             Running less than a second ago                       
sfq9p7pstsnk        my_cluster_web1.5   passyt.com/library/nginx:latest   passyt.com          Running             Starting 2 seconds ago                               
9kclhr40td07        my_cluster_web1.6   passyt.com/library/nginx:latest   server3             Running             Starting 1 second ago     

这样就部署完成 ,十分的方便。部署的和用命令敲的效果相同,实现了负载均衡,每个节点上都分布了两个。

docker ps
CONTAINER ID        IMAGE                             COMMAND                  CREATED             STATUS              PORTS               NAMES
667a186b73f0        passyt.com/library/nginx:latest   "nginx -g 'daemon of…"   40 seconds ago      Up 37 seconds       80/tcp              my_cluster_web1.6.9kclhr40td07qb6mnuzmji0u1
3b2a20cabd87        passyt.com/library/nginx:latest   "nginx -g 'daemon of…"   5 minutes ago       Up 5 minutes        80/tcp              my_cluster_web1.3.opiddn1x83efnnbpvi7zz7jix

如何不进入容器,就修改发布页面,因为现在部署的将所有卷都放在了一起,所以要找到逻辑卷的位置。

[root@server1 compose]# docker volume ls
DRIVER              VOLUME NAME
local               my_cluster_web-data
[root@server1 compose]# docker volume inspect my_cluster_web-data
"Mountpoint": "/var/lib/docker/volumes/my_cluster_web-data/_data"
[root@server1 compose]# cd /var/lib/docker/volumes/my_cluster_web-data/_data
[root@server1 _data]# ls
50x.html  index.html

这是挂载点,直接进入修改即可。但是这有一个问题,就是挂接节点不同步,在一台机子上进行修改只能保证该节点上的两个数据相同。

同时也可以部署一个监控,使用visualizer镜像,根据官方文档的提示进行部署。

 visualizer:
    image: dockersamples/visualizer:stable
    ports:
      - "8080:8080"
    stop_grace_period: 1m30s
    volumes:
      - "/var/run/docker.sock:/var/run/docker.sock"
    deploy:
      placement:
        constraints: [node.role == manager]

在这里插入图片描述
将这些命令写入docker-compose.yml文件中
依然使用docker stack deploy -c docker-compose.yml my_cluster这个命令进行读取。

监控作完之后可以进行软件的跟新替换,使用监控看的更为直观。
将原来的nginx替换为httpd服务

web1:
    image: passyt.com/library/httpd
    ports:
      - "80:80"
    volumes:
      - web-data:/usr/local/apache2/htdos
    networks:
      - my_net
    deploy:
      replicas: 3

下面这段跟在下面,跟着官方文档配置

 update_config:
    parallelism: 1  ##每次更新几个
    delay: 10s   ##多长时间更新一次
  restart_policy:
    condition: on-failure

在这里插入图片描述在这里插入图片描述在这里插入图片描述
使用文件给容器作限制
去/sys/fs/cgroup/memory/docker/文件下,这里面的文件就是docker容器中第内存限制文件。
如何查看不同容器中的限制?首先将每个容器的id找到

docker ps
CONTAINER ID        IMAGE                             COMMAND              CREATED             STATUS              PORTS               NAMES
665523b216c6        passyt.com/library/httpd:latest   "httpd-foreground"   6 minutes ago       Up 6 minutes        80/tcp              my_cluster_web1.1.qikzpp0

最前面的id是个缩写,我们需要进入完整id的目录中去,可以使用tab健进行补齐操作。
进入之后查看一个文件。

cat memory.limit_in_bytes
9223372036854771712

发现下面的数字很大,基本上没有作限制。
那么如何对内存直接进行限制呢?依然查看docker的官方文档。在文件中加入这些参数。

 limits:  ##最大占用
      cpus: '0.50' ##cpu的50%
      memory: 50M  ##50M内存
    reservations:  ##最基本会分配这么多
      cpus: '0.25' 
      memory: 20M

再加载这个文件,去cgroup目录进行查看(注:这个文件每加载一次相当于将容器删除后再建立,所以每次的id都不相同,注意查看)。

cat memory.limit_in_bytes
52428800

这个时候已经将容器进行了限制。

可视化
在网上拉取两个镜像
portainer/portainer和portainer/agent
将两个镜像上传至私有仓库
在官方可以下载其stack文件,接着直接进行部署就行了。也是十分的方便。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值