详解使用docker 1.12 搭建多主机docker swarm集群
发布时间 - 2026-01-11 02:18:20 点击率:次swarm是docker公司自己的容器集群管理工具,本文介绍了使用docker 1.12 搭建多主机docker swarm集群,分享给大家

准备
- 准备至少两台的centos 7 主机(全新最小安装, 可以使用虚拟机安装)
- 开放端口2377 tcp端口, 7946 4789 tcp udp 端口
- 本文使用192.168.99.101(hostname:centos-node4) 作为swarm manager
- 192.168.99.102(hostname:centos-node5) 作为swarm agent1
安装docker engine 1.12
在每台机器上执行以下命令
# sudo tee /etc/yum.repos.d/docker.repo <<-'EOF' [dockerrepo] name=Docker Repository baseurl=https://yum.dockerproject.org/repo/main/centos/7/ enabled=1 gpgcheck=1 gpgkey=https://yum.dockerproject.org/gpg EOF # sudo yum install docker-engine # sudo systemctl enable docker # sudo systemctl start docker
安装完后查看Docker 版本
[root@centos-node4 ~]# docker version Client: Version: 1.12.0 API version: 1.24 Go version: go1.6.3 Git commit: 8eab29e Built: OS/Arch: linux/amd64 Server: Version: 1.12.0 API version: 1.24 Go version: go1.6.3 Git commit: 8eab29e Built: OS/Arch: linux/amd64
开放端口相关命令
firewall-cmd --zone=public --add-port=2377/tcp --permanent firewall-cmd --zone=public --add-port=7946/tcp --permanent firewall-cmd --zone=public --add-port=7946/udp --permanent firewall-cmd --zone=public --add-port=4789/tcp --permanent firewall-cmd --zone=public --add-port=4789/udp --permanent firewall-cmd --reload
新版docker swarm 命令详情
有关集群的docker命令如下:
- docker swarm:集群管理,子命令有init, join,join-token, leave, update
- docker node:节点管理,子命令有demote, inspect,ls, promote, rm, ps, update
- docker service:服务管理,子命令有create, inspect, ps, ls ,rm , scale, update
- docker stack/deploy:试验特性,用于多应用部署
创建swarm 集群
查看docker swarm 命令说明
[root@centos-node4 ~]# docker swarm -h Flag shorthand -h has been deprecated, please use --help Usage: docker swarm COMMAND Manage Docker Swarm Options: --help Print usage Commands: init Initialize a swarm join Join a swarm as a node and/or manager join-token Manage join tokens update Update the swarm leave Leave a swarm Run 'docker swarm COMMAND --help' for more information on a command.
在swarm manager(centos-node4:192.168.99.101)初始化swarm集群
用--listen-addr指定监听的ip与端口
#命令格式: docker swarm init --listen-addr <MANAGER-IP>:<PORT> [root@centos-node4 ~]# docker swarm init --listen-addr 192.168.99.101:2377 Swarm initialized: current node (a60d5c3ttymvtozr46uvk17q4) is now a manager.
查看结果
[root@centos-node4 ~]# docker node ls ID HOSTNAME MEMBERSHIP STATUS AVAILABILITY MANAGER STATUS a60d5c3ttymvtozr46uvk17q4 * centos-node4 Accepted Ready Active Leader
把swarm-agent1(centos-node5: 192.168.99.102)添加到swarm集群
在swarm-agent1上执行:
#命令格式: docker swarm join <MANAGER-IP>:<PORT> [root@centos-node5 ~]# docker swarm join 192.168.99.101:2377 This node joined a Swarm as a worker.
在swarm manager查看结果
[root@centos-node4 ~]# docker node ls ID HOSTNAME MEMBERSHIP STATUS AVAILABILITY MANAGER STATUS 0ypcw58hjlcvr0xqbtizmau62 centos-node5 Accepted Ready Active a60d5c3ttymvtozr46uvk17q4 * centos-node4 Accepted Ready Active Leader
创建一个overlay 跨主机网络
查看原有网络
[root@centos-node4 ~]# docker network ls NETWORK ID NAME DRIVER SCOPE abec77415f48 bridge bridge local e2fff9d572a6 docker_gwbridge bridge local 166bd71f7d0e host host local 9gr6bfff1rv9 ingress overlay swarm 1d2bfc590294 none null local
可以看到在swarm上默认已有一个名为ingress的overlay 网络,默认在swarm里使用,本文会创建一个新的
创建一个新的overlay网络
[root@centos-node4 ~]# docker network create --driver overlay docker-net aoqs3p835s5glx69hi46ou2dw [root@centos-node4 ~]# docker network ls NETWORK ID NAME DRIVER SCOPE abec77415f48 bridge bridge local aoqs3p835s5g docker-net overlay swarm e2fff9d572a6 docker_gwbridge bridge local 166bd71f7d0e host host local 9gr6bfff1rv9 ingress overlay swarm 1d2bfc590294 none null local
新的网络(docker-net)已创建
在新的跨主机overlay 网络(docker-net)上创建应用
部署
用alpine镜像在docker-net网络上启动两个实例, 并编排为一组服务
[root@centos-node4 ~]# docker service create --replicas 2 --name helloworld --network=docker-net alpine ping docker.com 5lgdq3ihiez0o7h2uegu4fgd3
查看部署结果
[root@centos-node4 ~]# docker service ls ID NAME REPLICAS IMAGE COMMAND 5lgdq3ihiez0 helloworld 0/2 alpine ping docker.com [root@centos-node4 ~]# docker service tasks helloworld ID NAME SERVICE IMAGE LAST STATE DESIRED STATE NODE eul3bus45qz3b555wekotdmo5 helloworld.1 helloworld alpine Running 14 seconds Running centos-node5 55uhq6xxcv53xlkqv2f0be9b9 helloworld.2 helloworld alpine Running 14 seconds Running centos-node4
可以看到两个实例分别运行在两个节点上
测试两个主机的网络是否能互通
分别查看两个实例的名称
# 在swarm-manager 上执行 [root@centos-node4 ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES f4a197abdb0b alpine:latest "ping docker.com" 42 minutes ago Up 42 minutes helloworld.2.55uhq6xxcv53xlkqv2f0be9b9 # 在swarm-agnet1 上执行 [root@centos-node5 ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 39cc35cd54b5 alpine:latest "ping docker.com" 50 seconds ago Up 49 seconds helloworld.1.eul3bus45qz3b555wekotdmo5
在swarm-manager 上测试
[root@centos-node4 ~]# docker exec -ti helloworld.2.55uhq6xxcv53xlkqv2f0be9b9 sh / # ping helloworld.1.eul3bus45qz3b555wekotdmo5 PING helloworld.1.eul3bus45qz3b555wekotdmo5 (10.0.9.3): 56 data bytes 64 bytes from 10.0.9.3: seq=0 ttl=64 time=0.514 ms 64 bytes from 10.0.9.3: seq=1 ttl=64 time=0.508 ms 64 bytes from 10.0.9.3: seq=2 ttl=64 time=0.381 ms 64 bytes from 10.0.9.3: seq=3 ttl=64 time=0.408 ms ^C --- helloworld.1.eul3bus45qz3b555wekotdmo5 ping statistics --- 4 packets transmitted, 4 packets received, 0% packet loss round-trip min/avg/max = 0.381/0.452/0.514 ms
在swarm-agent1 上测试
[root@centos-node5 ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 39cc35cd54b5 alpine:latest "ping docker.com" 50 seconds ago Up 49 seconds helloworld.1.eul3bus45qz3b555wekotdmo5 [root@centos-node5 ~]# docker exec -ti helloworld.1.eul3bus45qz3b555wekotdmo5 sh / # ping helloworld.2.55uhq6xxcv53xlkqv2f0be9b9 PING helloworld.2.55uhq6xxcv53xlkqv2f0be9b9 (10.0.9.4): 56 data bytes 64 bytes from 10.0.9.4: seq=0 ttl=64 time=0.892 ms 64 bytes from 10.0.9.4: seq=1 ttl=64 time=0.463 ms 64 bytes from 10.0.9.4: seq=2 ttl=64 time=0.462 ms 64 bytes from 10.0.9.4: seq=3 ttl=64 time=0.478 ms 64 bytes from 10.0.9.4: seq=4 ttl=64 time=0.468 ms 64 bytes from 10.0.9.4: seq=5 ttl=64 time=0.459 ms ^C --- helloworld.2.55uhq6xxcv53xlkqv2f0be9b9 ping statistics --- 6 packets transmitted, 6 packets received, 0% packet loss round-trip min/avg/max = 0.459/0.537/0.892 ms
现在新版的docker swarm 管理非常简单, 可以快速的搭建起一个跨主机的集群并部署应用
dokcer swarm自带的负载均衡
创建一组服务
复制代码 代码如下:docker service create --replicas 2 --name whoami -p 8080:80 daocloud.io/nginx:alpine
访问服务(可以多执行几次)
# 访问地址格式: swarm-manager.ip + (-p映射的端口) curl -v 192.168.99.101:8080
然后用docker logs 查看容器中nginx的访问日志, 可以现两个容器都有访问记录
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# docker
# swarm
# 集群
# swarm搭建docker集群
# docker1.12搭建swarm
# docker swarm快速部署redis分布式集群的详细过程
# 阿里云服务器部署 Docker Swarm集群
# Docker-swarm快速搭建redis集群的方法步骤
# 使用Docker Swarm搭建分布式爬虫集群的方法示例
# docker swarm 集群故障与异常详解
# Docker使用Swarm组建集群的方法
# docker swarm 集群创建过程
# 创建一个
# 可以看到
# 自己的
# 都有
# 已有
# 几次
# 给大家
# 服务管理
# 镜像
# 可以使用
# 自带
# 完后
# 两台
# 是否能
# 大家多多
# 每台
# 负载均衡
# 机器上
# inspect
# join
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
广州网站制作公司哪家好一点,广州欧莱雅百库网络科技有限公司官网?
Laravel如何与Pusher实现实时通信?(WebSocket示例)
如何在橙子建站中快速调整背景颜色?
1688铺货到淘宝怎么操作 1688一键铺货到自己店铺详细步骤
简单实现Android验证码
在线ppt制作网站有哪些软件,如何把网页的内容做成ppt?
Laravel Sail是什么_基于Docker的Laravel本地开发环境Sail入门
如何用景安虚拟主机手机版绑定域名建站?
香港服务器租用费用高吗?如何避免常见误区?
中国移动官方网站首页入口 中国移动官网网页登录
悟空识字怎么关闭自动续费_悟空识字取消会员自动扣费步骤
Laravel如何实现图片防盗链功能_Laravel中间件验证Referer来源请求【方案】
Laravel如何获取当前登录用户信息_Laravel Auth门面使用与Session用户读取【技巧】
laravel服务容器和依赖注入怎么理解_laravel服务容器与依赖注入解析
免费视频制作网站,更新又快又好的免费电影网站?
linux写shell需要注意的问题(必看)
html5如何设置样式_HTML5样式设置方法与CSS应用技巧【教程】
laravel怎么使用数据库工厂(Factory)生成带有关联模型的数据_laravel Factory生成关联数据方法
如何基于云服务器快速搭建个人网站?
Laravel中间件起什么作用_Laravel Middleware请求生命周期与自定义详解
如何彻底删除建站之星生成的Banner?
绝密ChatGPT指令:手把手教你生成HR无法拒绝的求职信
Laravel控制器是什么_Laravel MVC架构中Controller的作用与实践
Laravel如何实现多级无限分类_Laravel递归模型关联与树状数据输出【方法】
Laravel怎么创建自己的包(Package)_Laravel扩展包开发入门到发布
Laravel如何使用withoutEvents方法临时禁用模型事件
Laravel如何安装使用Debugbar工具栏_Laravel性能调试与SQL监控插件【步骤】
Java类加载基本过程详细介绍
如何在宝塔面板中创建新站点?
Laravel广播系统如何实现实时通信_Laravel Reverb与WebSockets实战教程
如何挑选最适合建站的高性能VPS主机?
大同网页,大同瑞慈医院官网?
C语言设计一个闪闪的圣诞树
Win10如何卸载预装Edge扩展_Win10卸载Edge扩展教程【方法】
JavaScript如何操作视频_媒体API怎么控制播放
网站制作报价单模板图片,小松挖机官方网站报价?
手机网站制作与建设方案,手机网站如何建设?
怎么用AI帮你设计一套个性化的手机App图标?
js实现点击每个li节点,都弹出其文本值及修改
Laravel如何发送系统通知?(Notification渠道示例)
Laravel如何实现邮件验证激活账户_Laravel内置MustVerifyEmail接口配置【步骤】
Android仿QQ列表左滑删除操作
如何在景安云服务器上绑定域名并配置虚拟主机?
Laravel Seeder怎么填充数据_Laravel数据库填充器的使用方法与技巧
电视网站制作tvbox接口,云海电视怎样自定义添加电视源?
Laravel的路由模型绑定怎么用_Laravel Route Model Binding简化控制器逻辑
如何挑选优质建站一级代理提升网站排名?
,在苏州找工作,上哪个网站比较好?
php做exe能调用系统命令吗_执行cmd指令实现方式【详解】
如何在阿里云虚拟主机上快速搭建个人网站?

