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

    docker的网络模式

    docker有六种网络模式:

    • bridge                     桥接,使用自定义的IP(默认)
    • host(open)         与宿主机共享网络,开放模式
    • none(close)       不分配网络,关闭模式
    • Container(join)   与其他容器共享网络,联合模式    
    • overlay                   主要用于不同宿主机上的docker容器通信和swarm services
    • macvlan                 将容器的虚拟网卡直接连接在主机所在的物理网络上
    [root@mysql ~]# docker network ls
    NETWORK ID     NAME      DRIVER    SCOPE
    c2d0f3ca5b3b   bridge    bridge    local
    2f5dd7d954b2   host      host      local
    ac1aeee5da01   none      null      local

    docker network命令

    查看网络

    docker network ls                   ## 查看网络列表
    docker network ls -f driver=bridge  ## 查看bridge网络列表
    docker network ls -q                ## 仅查看网络ID列表

    创建网络

    docker network create  mynet             ## 创建默认的网络mynet,类型为bridge
    docker network create  -d bridge mynet   ## 指定网络驱动类型
    docker network create  --ipv6 mynet      ## 开启ipv6网络

    1、bridge模式

    docker的默认模式即不指定任何模式就是bridge模式,也是使用比较多的模式,此模式创建的容器会为每一个容器分配自己的网络 IP等信息,并将容器连接到一个虚拟网桥与外界通信。

     

    [root@apache ~]# docker network create --driver=bridge --subnet=192.168.0.0/16 br0
    ec647379842c90a8713203194b366b9188c38834594f1c6c23883c44d9d3ba84
    
    [root@apache ~]# docker network inspect br0
    [
        {
            "Name": "br0",
            "Id": "ec647379842c90a8713203194b366b9188c38834594f1c6c23883c44d9d3ba84",
            "Created": "2021-07-05T16:24:46.268098065+08:00",
            "Scope": "local",
            "Driver": "bridge",
            "EnableIPv6": false,
            "IPAM": {
                "Driver": "default",
                "Options": {},
                "Config": [
                    {
                        "Subnet": "192.168.0.0/16"
                    }
                ]

    2、host模式

    启动的容器如果指定了使用host模式,那么新创建的容器不会创建自己的虚拟网卡,而是直接使用宿主机的网卡和IP地址,因此在容器里面查看到的IP信息就是宿主机的信息,访问容器的时候直接使用宿主机IP+容器端口即可,不过容器的其他资源们必须文件系统、系统进程等还是和宿主机保持隔离。

    此模式的网络性能最高,但是各容器之间端口不能相同,适用于运行容器端口比较固定的业务。

    [root@mysql ~]# docker run -d --name test --net=host nginx:v1 
    707d3d796fe6bbc009b161b537fdb3d866b3c5fc959d8744c23cb1e123f5e9d2

    查看网络

    [root@mysql ~]# docker exec -it test bash
    [root@mysql /]# ip a
    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
        link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
        inet 127.0.0.1/8 scope host lo
           valid_lft forever preferred_lft forever
        inet6 ::1/128 scope host 
           valid_lft forever preferred_lft forever
    2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
        link/ether 00:0c:29:00:78:4c brd ff:ff:ff:ff:ff:ff
        inet 10.0.0.20/24 brd 10.0.0.255 scope global noprefixroute eth0
           valid_lft forever preferred_lft forever
        inet6 fe80::b248:5066:37c5:1e1/64 scope link noprefixroute 
           valid_lft forever preferred_lft forever
        inet6 fe80::ff3f:ffdb:f55a:8a15/64 scope link dadfailed tentative noprefixroute 
           valid_lft forever preferred_lft forever
    3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default 
        link/ether 02:42:90:15:87:86 brd ff:ff:ff:ff:ff:ff
        inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
           valid_lft forever preferred_lft forever
        inet6 fe80::42:90ff:fe15:8786/64 scope link 
           valid_lft forever preferred_lft forever

    测试访问宿主机地址

    [root@mysql ~]# curl 10.0.0.20
    test nginx page

     使用主机网络模式时,将丢弃已指定的端口

    [root@mysql ~]# docker run -itd --name test2 -p 91:80 --net=host nginx:v1 
    WARNING: Published ports are discarded when using host network mode
    234074fafa011ff46fa436fcd270d90c56e955415d30808356a44ab6a5321adf

    3、none模式

    None模式,使用参数 –net=none 指定 在使用none 模式后,Docker 容器不会进行任何网络配置,其没有网卡、没有IP也没有路由,因此默认无法与外界通信,需要手动添加网卡配置IP等,所以极少使用

    [root@mysql ~]# docker run -d --name test3 --net=none -p 89:80 nginx:v1 
    8bd0ac1735d6ca4a5a6add3dca902743628f4fa4ca7ccb98e3d32533742aca0b
    
    
    [root@mysql ~]# docker exec -it test3 bash
    [root@8bd0ac1735d6 /]# ip a
    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
        link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
        inet 127.0.0.1/8 scope host lo
           valid_lft forever preferred_lft forever

    4、Container模式

    Container模式,使用参数 –net=container:名称或ID 指定。 使用此模式创建的容器需指定和一个已经存在的容器共享一个网络,而不是和宿主机共享网络,新创建的容器不会创建自己的网卡也不会配置自己的IP,而是和一个已经存在的被指定的容器共享IP和端口范围,因此这个容器的端口不能和被指定的端口冲突,除了网络之外的文件系统、进程信息等仍然保持相互隔离,两个容器的进程可以通过lo网卡及容器ID进行通信

    [root@mysql ~]# docker run -it -d --name nginx-web1 -p 80:80 --net=bridge nginx:v1 
    2c06f8fe7dffa485e76d02f471f463a65daaf2e6280e65d53764d5b1ee749fd3
    
    
    [root@mysql ~]# docker run -it -d --name tomcat-web --net=container:nginx-web1 tomcat-web:app1
    f44032e3efce25eeb41a4b87b250922cec7d30db2e4361093039a32bfcba9b6b

    查看创建的容器网卡信息等

    [root@mysql ~]# docker exec -it nginx-web1 bash
    [root@2c06f8fe7dff /]# ip a
    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
        link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
        inet 127.0.0.1/8 scope host lo
           valid_lft forever preferred_lft forever
    4: eth0@if5: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 
        link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff link-netnsid 0
        inet 172.17.0.2/16 brd 172.17.255.255 scope global eth0
           valid_lft forever preferred_lft forever
    
    [root@2c06f8fe7dff /]# ss -lntp
    State        Recv-Q       Send-Q             Local Address:Port             Peer Address:Port       Process       
    LISTEN       0            1                      127.0.0.1:8005                  0.0.0.0:*                        
    LISTEN       0            100                      0.0.0.0:8009                  0.0.0.0:*                        
    LISTEN       0            100                      0.0.0.0:8080                  0.0.0.0:*                        
    LISTEN       0            511                      0.0.0.0:80                    0.0.0.0:*           users:(("nginx",pid=1,fd=6))
    
    
    [root@mysql ~]# docker exec -it tomcat-web bash
    [root@2c06f8fe7dff /]# ip a
    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
        link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
        inet 127.0.0.1/8 scope host lo
           valid_lft forever preferred_lft forever
    4: eth0@if5: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 
        link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff link-netnsid 0
        inet 172.17.0.2/16 brd 172.17.255.255 scope global eth0
           valid_lft forever preferred_lft forever
    
    
    [root@2c06f8fe7dff /]# ss -lntp
    State          Recv-Q         Send-Q                 Local Address:Port                 Peer Address:Port         
    LISTEN         0              1                          127.0.0.1:8005                      0.0.0.0:*            
    LISTEN         0              100                          0.0.0.0:8009                      0.0.0.0:*            
    LISTEN         0              100                          0.0.0.0:8080                      0.0.0.0:*            
    LISTEN         0              511                          0.0.0.0:80                        0.0.0.0:*     

      [root@276a71c17fbd /]# cat /etc/hosts
      127.0.0.1 localhost
      ::1 localhost ip6-localhost ip6-loopback
      fe00::0 ip6-localnet
      ff00::0 ip6-mcastprefix
      ff02::1 ip6-allnodes
      ff02::2 ip6-allrouters
      172.17.0.2 276a71c17fbd
      1.1.1.1 test.com

  • 相关阅读:
    git本地仓库基本使用(Repository)
    归途
    PowerDesigner逆向工程导入MYSQL数据库总结(转载)
    协程
    os.path.split 和 os.path.splitext
    转载)Linux平台下安装 python 模块包
    Java之map使用方法
    Java学习(JDBC java连接数据库)
    python -- 找出列表list中的重复元素
    JAVA打印变量类型
  • 原文地址:https://www.cnblogs.com/zh-dream/p/14931425.html
Copyright © 2011-2022 走看看