zoukankan      html  css  js  c++  java
  • docker 网络

    Docker0 网络详解

    1. 默认我我们安装完docker服务我们的系统会增加一个docker0的虚拟网卡

    image-20200912162233456

    解释:

    从上面图我们可以看出 每启动一个 容器我们的docker0 会通过veth-pair技术虚拟出一对的虚拟设备接口,他们都是成对出现的,一段连着协议,一段彼此相连

    正因为有这个特性,veth-pair 充当一个桥梁,连接各种虚拟网络设备

    OpenStack,Docker容器之间的连接,OVS的连接都是使用veth-pair技术
    

    image-20200912162653650

    思考: 因为我们的容器每重启一次 ip地址会变 这样会给我的容器互连造成致命的影响 有没什么办法可以解析主机名的方法

    众所周知平常我们在内网解析主机名的时候我们一般写入hosts 文件中或者加入同一个域中

    #我们容器也是提供了这样的方法
    1. 在我们启动是 加入 --link 参数就能实现这个需求  # --link 现在一般不提倡用了 配置麻烦
    
    

    image-20200914150425463

    原理

    image-20200914150612176

    还有没更简便的方法可以实现这个需求呢?

    自定义网络

    查看docker的网络

    [root@localhost ~]# docker network ls
    NETWORK ID          NAME                DRIVER              SCOPE
    27e69a0c595a        bridge              bridge              local
    ddc47c04c23c        host                host                local
    1777d22a6f41        none                null                local
    
    
    #网络模式
    bridge :桥接 (docker默认,自己创建也使用bridge模式!)
    none :不配置网络
    host :和宿主机共享网络
    container :容器网络连通,容器直接互联!(用的少!局限很大!)
    
    
    测试
    
    
    # 我们之前直接启动的命令 (默认是使用--net bridge,可省),这个bridge就是我们的docker0 
    docker run -d -P --name tomcat01 tomcat   #等价于
    docker run -d -P --name tomcat01 --net bridge tomcat
    
    
    # docker0(即bridge)默认不支持域名访问 ! --link可以打通连接,即支持域名访问!
    
    # 我们可以自定义一个网络!
    # --driver bridge    		网络模式定义为 :桥接
    # --subnet 192.168.0.0/16	定义子网 ,范围为:192.168.0.2 ~ 192.168.255.255
    # --gateway 192.168.0.1		子网网关设为: 192.168.0.1 
    [root@localhost /]# docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet
    7ee3adf259c8c3d86fce6fd2c2c9f85df94e6e57c2dce5449e69a5b024efc28c
    [root@localhost /]# docker network ls
    NETWORK ID          NAME                DRIVER              SCOPE
    461bf576946c        bridge              bridge              local
    c501704cf28e        host                host                local
    7ee3adf259c8        mynet               bridge              local  	#自定义的网络
    9354fbcc160f        none                null                local
    
    [root@localhost ~]# docker network inspect mynet
    [
        {
            "Name": "mynet",
            "Id": "168f5229d3531fd1cac0823fdea3960e3f55f1f721154faa70a52efda19808cd",
            "Created": "2020-09-10T19:41:38.271638094+08:00",
            "Scope": "local",
            "Driver": "bridge",
            "EnableIPv6": false,
            "IPAM": {
                "Driver": "default",
                "Options": {},
                "Config": [
                    {
                        "Subnet": "192.168.0.0/16",
                        "Gateway": "192.168.0.1"
                    }
                ]
            },
            "Internal": false,
            "Attachable": false,
            "Ingress": false,
            "ConfigFrom": {
                "Network": ""
            },
            "ConfigOnly": false,
            "Containers": {},
            "Options": {},
            "Labels": {}
        }
    ]
    

    基于mynet 创建容器

    [root@localhost ~]# docker run -d -P --name tomcat-net-01 --net mynet tomcat
    [root@localhost ~]# docker run -d -P --name tomcat-net-02 --net mynet tomcat
    

    image-20200914152005759

    image-20200914152301633

    从上图我们可以看出自定以网络 我们是通过路由网关通信的 并非hosts 文件的解析

    我想要docker0 的网段的机器能够和mynet的网段机器能够通信 是否能够做到呢?

    网络连通

    image-20200914153055900

    现在tomcat01 是不能喝mynet中的容器通信的

    #使用docker network connect 网络 需要打通的容器
    
    [root@localhost ~]# docker network connect mynet tomcat01
    [root@localhost ~]# docker network inspect mynet 
    

    image-20200914153933274

    测试

    image-20200914154109499

    Redis 集群部署实战

    需求:1.使用docker部署Redis集群3主3从

    ​ 2. docker容器必须在一个网段中能够解析主机名

    #1.创建一个redis的网段
    
    #2.在宿主机上创建容的数据卷目录
    
    for port in $(seq 1 6);
    do 
    mkdir -p /mydata/redis/node-${port}/conf
    touch /mydata/redis/node-${port}/conf/redis.conf
    cat <<EOF>>/mydata/redis/node-${port}/conf/redis.conf
    port 6379
    bind 0.0.0.0
    cluster-enabled yes
    cluster-config-file nodes.conf
    cluster-node-timeout 5000
    cluster-announce-ip 192.38.0.1${port}
    cluster-announce-port 6379
    cluster-announce-bus-port 16379
    appendonly yes
    EOF
    done
    #查看创建结果
    [root@localhost ~]# tree /mydata/
    /mydata/
    └── redis
        ├── node-1
        │   └── conf
        │       └── redis.conf
        ├── node-2
        │   └── conf
        │       └── redis.conf
        ├── node-3
        │   └── conf
        │       └── redis.conf
        ├── node-4
        │   └── conf
        │       └── redis.conf
        ├── node-5
        │   └── conf
        │       └── redis.conf
        └── node-6
            └── conf
                └── redis.conf
    
    13 directories, 6 files
    
    #创建容器
    for i in $(seq 1 6);
    do
    docker run -p 637$i:6379 -p 1637$i:16379 --name redis-$i 
    -v /mydata/redis/node-$i/data:/data 
    -v /mydata/redis/node-$i/conf/redis.conf:/etc/redis/redis.conf 
    -d --net redis --ip 192.38.0.1$i redis:5.0.9-alpine3.11 redis-server /etc/redis/redis.conf
    done
    
    
    #进入容器创建集群
    [root@localhost ~]# docker exec -it redis-1 /bin/sh
    /data # redis-cli --cluster create 192.38.0.11:6379 192.38.0.12:6379 192.38.0.13:6379 192.38.0.14:6379 192.38.0.15:6379 192.38.0.16:6379 --cluster-replicas 1
    >>> Performing hash slots allocation on 6 nodes...
    Master[0] -> Slots 0 - 5460
    Master[1] -> Slots 5461 - 10922
    Master[2] -> Slots 10923 - 16383
    Adding replica 192.38.0.15:6379 to 192.38.0.11:6379
    Adding replica 192.38.0.16:6379 to 192.38.0.12:6379
    Adding replica 192.38.0.14:6379 to 192.38.0.13:6379
    M: 8d2596670d44021741caca77fce72085c7a23ec2 192.38.0.11:6379
       slots:[0-5460] (5461 slots) master
    M: f15436d5f3b5d43aa0b1b79994d1d3e820a8ddeb 192.38.0.12:6379
       slots:[5461-10922] (5462 slots) master
    M: 4c4393261640dc27a89260d7e34f13dc56933020 192.38.0.13:6379
       slots:[10923-16383] (5461 slots) master
    S: 193f792b54b41d8359c49961468c1a9c3235027f 192.38.0.14:6379
       replicates 4c4393261640dc27a89260d7e34f13dc56933020
    S: cd78883a115e6605cf84ae01b5b9863df1e8185b 192.38.0.15:6379
       replicates 8d2596670d44021741caca77fce72085c7a23ec2
    S: 257fe3100935b35a19c60f1bc8025207ab431ae7 192.38.0.16:6379
       replicates f15436d5f3b5d43aa0b1b79994d1d3e820a8ddeb
    Can I set the above configuration? (type 'yes' to accept): yes
    >>> Nodes configuration updated
    >>> Assign a different config epoch to each node
    >>> Sending CLUSTER MEET messages to join the cluster
    Waiting for the cluster to join
    ...
    >>> Performing Cluster Check (using node 192.38.0.11:6379)
    M: 8d2596670d44021741caca77fce72085c7a23ec2 192.38.0.11:6379
       slots:[0-5460] (5461 slots) master
       1 additional replica(s)
    S: cd78883a115e6605cf84ae01b5b9863df1e8185b 192.38.0.15:6379
       slots: (0 slots) slave
       replicates 8d2596670d44021741caca77fce72085c7a23ec2
    M: 4c4393261640dc27a89260d7e34f13dc56933020 192.38.0.13:6379
       slots:[10923-16383] (5461 slots) master
       1 additional replica(s)
    M: f15436d5f3b5d43aa0b1b79994d1d3e820a8ddeb 192.38.0.12:6379
       slots:[5461-10922] (5462 slots) master
       1 additional replica(s)
    S: 193f792b54b41d8359c49961468c1a9c3235027f 192.38.0.14:6379
       slots: (0 slots) slave
       replicates 4c4393261640dc27a89260d7e34f13dc56933020
    S: 257fe3100935b35a19c60f1bc8025207ab431ae7 192.38.0.16:6379
       slots: (0 slots) slave
       replicates f15436d5f3b5d43aa0b1b79994d1d3e820a8ddeb
    [OK] All nodes agree about slots configuration.
    >>> Check for open slots...
    >>> Check slots coverage...
    [OK] All 16384 slots covered.
    
    
    
    

    image-20200914163620029

    接下来我们将 主库 redis-3 停掉 测试是否能查到数据

    image-20200914163756139

    image-20200914164137519

    image-20200914164329443

    至此redis集群测试完成!

    *************** 当你发现自己的才华撑不起野心时,就请安静下来学习吧!***************
  • 相关阅读:
    web服务器-Apache
    nginx优化
    nginx下载限速
    nginx-URL重写
    HDU 5358 First One 求和(序列求和,优化)
    HDU 5360 Hiking 登山 (优先队列,排序)
    HDU 5353 Average 糖果分配(模拟,图)
    UVALive 4128 Steam Roller 蒸汽式压路机(最短路,变形) WA中。。。。。
    HDU 5348 MZL's endless loop 给边定向(欧拉回路,最大流)
    HDU 5344 MZL's xor (水题)
  • 原文地址:https://www.cnblogs.com/martin-huang/p/13683607.html
Copyright © 2011-2022 走看看