詳解使用docker 1.12 搭建多主機(jī)docker swarm集群
swarm是docker公司自己的容器集群管理工具,本文介紹了使用docker 1.12 搭建多主機(jī)docker swarm集群,分享給大家
準(zhǔn)備
- 準(zhǔn)備至少兩臺(tái)的centos 7 主機(jī)(全新最小安裝, 可以使用虛擬機(jī)安裝)
- 開(kāi)放端口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
在每臺(tái)機(jī)器上執(zhí)行以下命令
# 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
開(kāi)放端口相關(guān)命令
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 命令詳情
有關(guān)集群的docker命令如下:
- docker swarm:集群管理,子命令有init, join,join-token, leave, update
- docker node:節(jié)點(diǎn)管理,子命令有demote, inspect,ls, promote, rm, ps, update
- docker service:服務(wù)管理,子命令有create, inspect, ps, ls ,rm , scale, update
- docker stack/deploy:試驗(yàn)特性,用于多應(yīng)用部署
創(chuàng)建swarm 集群
查看docker swarm 命令說(shuō)明
[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
指定監(jiān)聽(tīng)的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.
查看結(jié)果
[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上執(zhí)行:
#命令格式: 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查看結(jié)果
[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
創(chuàng)建一個(gè)overlay 跨主機(jī)網(wǎng)絡(luò)
查看原有網(wǎng)絡(luò)
[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上默認(rèn)已有一個(gè)名為ingress的overlay 網(wǎng)絡(luò),默認(rèn)在swarm里使用,本文會(huì)創(chuàng)建一個(gè)新的
創(chuàng)建一個(gè)新的overlay網(wǎng)絡(luò)
[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
新的網(wǎng)絡(luò)(docker-net)已創(chuàng)建
在新的跨主機(jī)overlay 網(wǎng)絡(luò)(docker-net)上創(chuàng)建應(yīng)用
部署
用alpine鏡像在docker-net網(wǎng)絡(luò)上啟動(dòng)兩個(gè)實(shí)例, 并編排為一組服務(wù)
[root@centos-node4 ~]# docker service create --replicas 2 --name helloworld --network=docker-net alpine ping docker.com 5lgdq3ihiez0o7h2uegu4fgd3
查看部署結(jié)果
[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
可以看到兩個(gè)實(shí)例分別運(yùn)行在兩個(gè)節(jié)點(diǎn)上
測(cè)試兩個(gè)主機(jī)的網(wǎng)絡(luò)是否能互通
分別查看兩個(gè)實(shí)例的名稱
# 在swarm-manager 上執(zhí)行 [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 上執(zhí)行 [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 上測(cè)試
[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 上測(cè)試
[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
現(xiàn)在新版的docker swarm 管理非常簡(jiǎn)單, 可以快速的搭建起一個(gè)跨主機(jī)的集群并部署應(yīng)用
dokcer swarm自帶的負(fù)載均衡
創(chuàng)建一組服務(wù)
訪問(wèn)服務(wù)(可以多執(zhí)行幾次)
# 訪問(wèn)地址格式: swarm-manager.ip + (-p映射的端口) curl -v 192.168.99.101:8080
然后用docker logs 查看容器中nginx的訪問(wèn)日志, 可以現(xiàn)兩個(gè)容器都有訪問(wèn)記錄
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Docker CentOS7的系統(tǒng)上安裝部署以及基礎(chǔ)教程
這篇文章主要介紹了Docker CentOS7的系統(tǒng)上安裝部署以及基礎(chǔ)教程的相關(guān)資料,需要的朋友可以參考下2016-10-10Docker運(yùn)行hello-world鏡像失敗或超時(shí)的問(wèn)題
在安裝Docker并嘗試運(yùn)行hello-world時(shí),可能會(huì)遇到超時(shí)問(wèn)題,這通常是由于默認(rèn)的鏡像源訪問(wèn)速度慢造成的,解決這個(gè)問(wèn)題的辦法是更換鏡像源,雖然許多人推薦使用阿里云的鏡像源,對(duì)Docker hello-world超時(shí)問(wèn)題感興趣的朋友一起看看吧2024-09-09Docker?Desktop常見(jiàn)的幾種啟動(dòng)失敗問(wèn)題解決方法
使用Docker Desktop 可以很方便的啟用 Kubernetes,下面這篇文章主要給大家介紹了關(guān)于Docker?Desktop常見(jiàn)的幾種啟動(dòng)失敗問(wèn)題解決方法的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-09-09使用非root用戶安裝及啟動(dòng)docker的問(wèn)題(rootless模式運(yùn)行)
docker是使用--userns-remap容器用戶映射宿主機(jī)用戶的方式來(lái)解決問(wèn)題,用戶和組的映射由兩個(gè)配置文件來(lái)控制,分別是/etc/subuid和/etc/subgid,本文給大家介紹非root用戶啟動(dòng)docker的問(wèn)題,感興趣的朋友一起看看吧2022-05-05關(guān)于Docker容器內(nèi)部無(wú)法解析域名問(wèn)題的解決
最近工作中遇到一個(gè)問(wèn)題,項(xiàng)目?jī)?nèi)部需要訪問(wèn)外網(wǎng),但上傳文件,但是一直報(bào)unknown host,無(wú)法解析域名,所以下面這篇文章主要給大家介紹了關(guān)于Docker容器內(nèi)部無(wú)法解析域名問(wèn)題的解決方法,需要的朋友可以參考借鑒,下面來(lái)一起看看吧。2017-07-07