音效素材网提供各类素材,打造精品素材网站!

站内导航 站长工具 投稿中心 手机访问

音效素材

详解使用docker 1.12 搭建多主机docker swarm集群
日期:2017-07-12 11:48:24   来源:脚本之家

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/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命令如下:

  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 -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中安装mysql详解

    本篇文章主要介绍了在docker中安装mysql详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编...

    详解 安装 docker mysql

    win10中文输入法仅在桌面显示怎么办?

    win10中文输入法仅在桌面显示怎么办?

    win10系统使用搜狗,QQ输入法只有在显示桌面的时候才出来,在使用其他程序输入框里面却只能输入字母数字,win10中...

    win10 中文输入法

    一分钟掌握linux系统目录结构

    这篇文章主要介绍了linux系统目录结构,通过结构图和多张表格了解linux系统目录结构,感兴趣的小伙伴们可以参考一...

    结构 目录 系统 linux

    PHP程序员玩转Linux系列 Linux和Windows安装

    这篇文章主要为大家详细介绍了PHP程序员玩转Linux系列文章,Linux和Windows安装nginx教程,具有一定的参考价值,感兴趣...

    玩转 程序员 安装 系列 PHP

    win10怎么安装杜比音效Doby V4.1 win10安装杜

    第四代杜比®家庭影院®技术包含了一整套协同工作的技术,让PC 发出清晰的环绕声同时第四代杜比家庭影院技术...

    win10杜比音效

    纯CSS实现iOS风格打开关闭选择框功能

    这篇文章主要介绍了纯CSS实现iOS风格打开关闭选择框,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作...

    css ios c

    Win7如何给C盘扩容 Win7系统电脑C盘扩容的办法

    Win7如何给C盘扩容 Win7系统电脑C盘扩容的

    Win7给电脑C盘扩容的办法大家知道吗?当系统分区C盘空间不足时,就需要给它扩容了,如果不管,C盘没有足够的空间...

    Win7 C盘 扩容

    百度推广竞品词的投放策略

    SEM是基于关键词搜索的营销活动。作为推广人员,我们所做的工作,就是打理成千上万的关键词,关注它们的质量度...

    百度推广 竞品词

    Visual Studio Code(vscode) git的使用教程

    这篇文章主要介绍了详解Visual Studio Code(vscode) git的使用,小编觉得挺不错的,现在分享给大家,也给大家做个参考。...

    教程 Studio Visual Code git

    七牛云储存创始人分享七牛的创立故事与

    这篇文章主要介绍了七牛云储存创始人分享七牛的创立故事与对Go语言的应用,七牛选用Go语言这门新兴的编程语言进行...

    七牛 Go语言

    Win10预览版Mobile 10547即将发布 9月19日上午

    微软副总裁Gabriel Aul的Twitter透露了 Win10 Mobile预览版10536即将发布,他表示该版本已进入内部慢速版阶段,发布时间目...

    Win10 预览版

    HTML标签meta总结,HTML5 head meta 属性整理

    移动前端开发中添加一些webkit专属的HTML5头部标签,帮助浏览器更好解析HTML代码,更好地将移动web前端页面表现出来...

    移动端html5模拟长按事件的实现方法

    这篇文章主要介绍了移动端html5模拟长按事件的实现方法的相关资料,小编觉得挺不错的,现在分享给大家,也给大家...

    移动端 html5 长按

    HTML常用meta大全(推荐)

    这篇文章主要介绍了HTML常用meta大全(推荐),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参...

    cdr怎么把图片转换成位图? cdr图片转换为位图的教程

    cdr怎么把图片转换成位图? cdr图片转换为

    cdr怎么把图片转换成位图?cdr中插入的图片想要转换成位图,该怎么转换呢?下面我们就来看看cdr图片转换为位图的...

    cdr 图片 位图

    win10系统怎么录屏?win10系统自带录屏详细教程

    win10系统怎么录屏?win10系统自带录屏详细

    当我们是使用win10系统的时候,想要录制电脑上的画面,这时候有人会想到下个第三方软件,其实可以用电脑上的自带...

    win10 系统自带录屏 详细教程

    + 更多教程 +
    WIN服务器linux服务器FTP服务器DNS服务器其他