docker 1.12版本的swarm集羣使用

Docker 1.12版本後,Swarm變化比較大,更加簡單、好用,並且採用了gossip協議後,支持多個Manager,也更加穩定可靠了。不須要單獨安裝,Swarm的集羣功能已經成爲Docker Engine的一部分。所以,能夠說,集羣已經成爲Docker的一個內置功能。node

 

docker swarm 命令詳情

有關集羣的docker命令以下:docker

  1. docker swarm:集羣管理,子命令有init, join, leave, update
  2. docker node:節點管理,子命令有accept, promote, demote, inspect, update, tasks, ls, rm
  3. docker service:服務管理,子命令有create, inspect, update, remove, tasks
  4. 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
  update      Update the Swarm
  leave       Leave a Swarm
  inspect     Inspect the Swarm

Run 'docker swarm COMMAND --help' for more information on a command.
  • 在swarm manager(centos-node4:192.168.99.101)初始化swarm集羣

--listen-addr指定監聽的ip與端口centos

#命令格式: 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 網絡, 能夠直接使用, 但本文會建立一個新的spa

  • 建立一個新的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)已建立code

在新的跨主機overlay 網絡(docker-net)上建立應用

  • 部署

alpine鏡像在docker-net網絡上啓動兩個實例, 並編排爲一組服務orm

[root@centos-node4 ~]# docker service create --replicas 2 --name helloworld --network=ingress  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

能夠看到兩個實例分別運行在兩個節點上ip

測試兩個主機的網絡是否能互通

  • 分別查看兩個實例的名稱
# 在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 管理很是簡單, 能夠快速的搭建起一個跨主機的集羣並部署應用rem

相關文章
相關標籤/搜索