详解使用docker 1.12 搭建多主机docker swarm集群
swarm是docker公司自己的容器集群管理工具,本文介绍了使用docker1.12搭建多主机dockerswarm集群,分享给大家
准备
- 准备至少两台的centos7主机(全新最小安装,可以使用虚拟机安装)
- 开放端口2377tcp端口,79464789tcpudp端口
- 本文使用192.168.99.101(hostname:centos-node4)作为swarmmanager
- 192.168.99.102(hostname:centos-node5)作为swarmagent1
安装dockerengine1.12
在每台机器上执行以下命令
#sudotee/etc/yum.repos.d/docker.repo<<-'EOF' [dockerrepo] name=DockerRepository baseurl=https://yum.dockerproject.org/repo/main/centos/7/ enabled=1 gpgcheck=1 gpgkey=https://yum.dockerproject.org/gpg EOF #sudoyuminstalldocker-engine #sudosystemctlenabledocker #sudosystemctlstartdocker
安装完后查看Docker版本
[root@centos-node4~]#dockerversion Client: Version:1.12.0 APIversion:1.24 Goversion:go1.6.3 Gitcommit:8eab29e Built: OS/Arch:linux/amd64 Server: Version:1.12.0 APIversion:1.24 Goversion:go1.6.3 Gitcommit: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
新版dockerswarm命令详情
有关集群的docker命令如下:
- dockerswarm:集群管理,子命令有init,join,join-token,leave,update
- dockernode:节点管理,子命令有demote,inspect,ls,promote,rm,ps,update
- dockerservice:服务管理,子命令有create,inspect,ps,ls,rm,scale,update
- dockerstack/deploy:试验特性,用于多应用部署
创建swarm集群
查看dockerswarm命令说明
[root@centos-node4~]#dockerswarm-h Flagshorthand-hhasbeendeprecated,pleaseuse--help Usage:dockerswarmCOMMAND ManageDockerSwarm Options: --helpPrintusage Commands: initInitializeaswarm joinJoinaswarmasanodeand/ormanager join-tokenManagejointokens updateUpdatetheswarm leaveLeaveaswarm Run'dockerswarmCOMMAND--help'formoreinformationonacommand.
在swarmmanager(centos-node4:192.168.99.101)初始化swarm集群
用--listen-addr指定监听的ip与端口
#命令格式:dockerswarminit--listen-addr: [root@centos-node4~]#dockerswarminit--listen-addr192.168.99.101:2377 Swarminitialized:currentnode(a60d5c3ttymvtozr46uvk17q4)isnowamanager.
查看结果
[root@centos-node4~]#dockernodels IDHOSTNAMEMEMBERSHIPSTATUSAVAILABILITYMANAGERSTATUS a60d5c3ttymvtozr46uvk17q4*centos-node4AcceptedReadyActiveLeader
把swarm-agent1(centos-node5:192.168.99.102)添加到swarm集群
在swarm-agent1上执行:
#命令格式:dockerswarmjoin: [root@centos-node5~]#dockerswarmjoin192.168.99.101:2377 ThisnodejoinedaSwarmasaworker.
在swarmmanager查看结果
[root@centos-node4~]#dockernodels IDHOSTNAMEMEMBERSHIPSTATUSAVAILABILITYMANAGERSTATUS 0ypcw58hjlcvr0xqbtizmau62centos-node5AcceptedReadyActive a60d5c3ttymvtozr46uvk17q4*centos-node4AcceptedReadyActiveLeader
创建一个overlay跨主机网络
查看原有网络
[root@centos-node4~]#dockernetworkls NETWORKIDNAMEDRIVERSCOPE abec77415f48bridgebridgelocal e2fff9d572a6docker_gwbridgebridgelocal 166bd71f7d0ehosthostlocal 9gr6bfff1rv9ingressoverlayswarm 1d2bfc590294nonenulllocal
可以看到在swarm上默认已有一个名为ingress的overlay网络,默认在swarm里使用,本文会创建一个新的
创建一个新的overlay网络
[root@centos-node4~]#dockernetworkcreate--driveroverlaydocker-net aoqs3p835s5glx69hi46ou2dw [root@centos-node4~]#dockernetworkls NETWORKIDNAMEDRIVERSCOPE abec77415f48bridgebridgelocal aoqs3p835s5gdocker-netoverlayswarm e2fff9d572a6docker_gwbridgebridgelocal 166bd71f7d0ehosthostlocal 9gr6bfff1rv9ingressoverlayswarm 1d2bfc590294nonenulllocal
新的网络(docker-net)已创建
在新的跨主机overlay网络(docker-net)上创建应用
部署
用alpine镜像在docker-net网络上启动两个实例,并编排为一组服务
[root@centos-node4~]#dockerservicecreate--replicas2--namehelloworld--network=docker-netalpinepingdocker.com 5lgdq3ihiez0o7h2uegu4fgd3
查看部署结果
[root@centos-node4~]#dockerservicels IDNAMEREPLICASIMAGECOMMAND 5lgdq3ihiez0helloworld0/2alpinepingdocker.com [root@centos-node4~]#dockerservicetaskshelloworld IDNAMESERVICEIMAGELASTSTATEDESIREDSTATENODE eul3bus45qz3b555wekotdmo5helloworld.1helloworldalpineRunning14secondsRunningcentos-node5 55uhq6xxcv53xlkqv2f0be9b9helloworld.2helloworldalpineRunning14secondsRunningcentos-node4
可以看到两个实例分别运行在两个节点上
测试两个主机的网络是否能互通
分别查看两个实例的名称
#在swarm-manager上执行 [root@centos-node4~]#dockerps-a CONTAINERIDIMAGECOMMANDCREATEDSTATUSPORTSNAMES f4a197abdb0balpine:latest"pingdocker.com"42minutesagoUp42minuteshelloworld.2.55uhq6xxcv53xlkqv2f0be9b9 #在swarm-agnet1上执行 [root@centos-node5~]#dockerps-a CONTAINERIDIMAGECOMMANDCREATEDSTATUSPORTSNAMES 39cc35cd54b5alpine:latest"pingdocker.com"50secondsagoUp49secondshelloworld.1.eul3bus45qz3b555wekotdmo5
在swarm-manager上测试
[root@centos-node4~]#dockerexec-tihelloworld.2.55uhq6xxcv53xlkqv2f0be9b9sh /#pinghelloworld.1.eul3bus45qz3b555wekotdmo5 PINGhelloworld.1.eul3bus45qz3b555wekotdmo5(10.0.9.3):56databytes 64bytesfrom10.0.9.3:seq=0ttl=64time=0.514ms 64bytesfrom10.0.9.3:seq=1ttl=64time=0.508ms 64bytesfrom10.0.9.3:seq=2ttl=64time=0.381ms 64bytesfrom10.0.9.3:seq=3ttl=64time=0.408ms ^C ---helloworld.1.eul3bus45qz3b555wekotdmo5pingstatistics--- 4packetstransmitted,4packetsreceived,0%packetloss round-tripmin/avg/max=0.381/0.452/0.514ms
在swarm-agent1上测试
[root@centos-node5~]#dockerps-a CONTAINERIDIMAGECOMMANDCREATEDSTATUSPORTSNAMES 39cc35cd54b5alpine:latest"pingdocker.com"50secondsagoUp49secondshelloworld.1.eul3bus45qz3b555wekotdmo5 [root@centos-node5~]#dockerexec-tihelloworld.1.eul3bus45qz3b555wekotdmo5sh /#pinghelloworld.2.55uhq6xxcv53xlkqv2f0be9b9 PINGhelloworld.2.55uhq6xxcv53xlkqv2f0be9b9(10.0.9.4):56databytes 64bytesfrom10.0.9.4:seq=0ttl=64time=0.892ms 64bytesfrom10.0.9.4:seq=1ttl=64time=0.463ms 64bytesfrom10.0.9.4:seq=2ttl=64time=0.462ms 64bytesfrom10.0.9.4:seq=3ttl=64time=0.478ms 64bytesfrom10.0.9.4:seq=4ttl=64time=0.468ms 64bytesfrom10.0.9.4:seq=5ttl=64time=0.459ms ^C ---helloworld.2.55uhq6xxcv53xlkqv2f0be9b9pingstatistics--- 6packetstransmitted,6packetsreceived,0%packetloss round-tripmin/avg/max=0.459/0.537/0.892ms
现在新版的dockerswarm管理非常简单,可以快速的搭建起一个跨主机的集群并部署应用
dokcerswarm自带的负载均衡
创建一组服务
dockerservicecreate--replicas2--namewhoami-p8080:80daocloud.io/nginx:alpine
访问服务(可以多执行几次)
#访问地址格式:swarm-manager.ip+(-p映射的端口) curl-v192.168.99.101:8080
然后用dockerlogs查看容器中nginx的访问日志,可以现两个容器都有访问记录
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。