侯体宗的博客
  • 首页
  • Hyperf版
  • beego仿版
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 中国象棋ai
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

详解使用docker 1.12 搭建多主机docker swarm集群

Docker  /  管理员 发布于 7年前   261

swarm是docker公司自己的容器集群管理工具,本文介绍了使用docker 1.12 搭建多主机docker swarm集群,分享给大家

准备

  1. 准备至少两台的centos 7 主机(全新最小安装, 可以使用虚拟机安装)
  2. 开放端口2377 tcp端口, 7946 4789 tcp udp 端口
  3. 本文使用192.168.99.101(hostname:centos-node4) 作为swarm manager
  4. 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/amd64Server:  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命令如下:

  1. docker swarm:集群管理,子命令有init, join,join-token, leave, update
  2. docker node:节点管理,子命令有demote, inspect,ls, promote, rm, ps, update
  3. docker service:服务管理,子命令有create, inspect, ps, ls ,rm , scale, update
  4. docker stack/deploy:试验特性,用于多应用部署

创建swarm 集群

查看docker swarm 命令说明

[root@centos-node4 ~]# docker swarm -hFlag shorthand -h has been deprecated, please use --helpUsage:  docker swarm COMMANDManage Docker SwarmOptions:    --help  Print usageCommands:  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 swarmRun '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:2377Swarm initialized: current node (a60d5c3ttymvtozr46uvk17q4) is now a manager. 

查看结果

[root@centos-node4 ~]# docker node lsID  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:2377This node joined a Swarm as a worker. 

在swarm manager查看结果

[root@centos-node4 ~]# docker node lsID  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 lsNETWORK 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-netaoqs3p835s5glx69hi46ou2dw  [root@centos-node4 ~]# docker network lsNETWORK 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.com5lgdq3ihiez0o7h2uegu4fgd3 

查看部署结果

[root@centos-node4 ~]# docker service lsID      NAME    REPLICAS IMAGE  COMMAND 5lgdq3ihiez0 helloworld 0/2    alpine ping docker.com [root@centos-node4 ~]# docker service tasks helloworldID 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 -aCONTAINER 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 -aCONTAINER 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.eul3bus45qz3b555wekotdmo5PING 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 -aCONTAINER 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.55uhq6xxcv53xlkqv2f0be9b9PING 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搭建redis集群的环境搭建
    下一条:
    使用Docker部署 spring-boot maven应用的方法
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • 在docker环境中实现Laravel项目执行定时任务和消息队列流程步骤(0个评论)
    • 在MacBook下laravel项目多php版本docker开发环境配置方案(0个评论)
    • 在docker环境中部署docker部署elk架构流程步骤(1个评论)
    • docker compose跟Dockerfile的区别浅析(0个评论)
    • Ubuntu 22.04系统中安装podman流程步骤(1个评论)
    • 近期文章
    • 智能合约Solidity学习CryptoZombie第四课:僵尸作战系统(0个评论)
    • 智能合约Solidity学习CryptoZombie第三课:组建僵尸军队(高级Solidity理论)(0个评论)
    • 智能合约Solidity学习CryptoZombie第二课:让你的僵尸猎食(0个评论)
    • 智能合约Solidity学习CryptoZombie第一课:生成一只你的僵尸(0个评论)
    • 在go中实现一个常用的先进先出的缓存淘汰算法示例代码(0个评论)
    • 在go+gin中使用"github.com/skip2/go-qrcode"实现url转二维码功能(0个评论)
    • 在go语言中使用api.geonames.org接口实现根据国际邮政编码获取地址信息功能(1个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf分页文件功能(0个评论)
    • gmail发邮件报错:534 5.7.9 Application-specific password required...解决方案(0个评论)
    • 欧盟关于强迫劳动的规定的官方举报渠道及官方举报网站(0个评论)
    • 近期评论
    • 122 在

      学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..
    • 123 在

      Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..
    • 原梓番博客 在

      在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..
    • 博主 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..
    • 1111 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
    • 2017-11
    • 2020-06
    • 2021-05
    • 2021-08
    • 2021-09
    • 2021-10
    • 2021-11
    • 2021-12
    • 2022-01
    • 2022-02
    • 2022-03
    • 2022-07
    • 2022-08
    • 2022-09
    • 2022-11
    • 2023-01
    • 2023-02
    • 2023-03
    • 2023-04
    • 2024-03
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客