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集群测试完成!

    *************** 当你发现自己的才华撑不起野心时,就请安静下来学习吧!***************
  • 相关阅读:
    CSS Modules
    回调地狱
    css实现双色饼图
    vue项目中使用less
    pug(jade) 学习笔记
    React组件proptypes, ref
    react+express实现跨域
    react高阶组件
    Oracle数据库出现锁表情况分析
    JPA常用注解记录
  • 原文地址:https://www.cnblogs.com/martin-huang/p/13683607.html
Copyright © 2011-2022 走看看