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

    默认网络
    1、查看docker网络:

    docker network ls

    Docker中默认的三种网络分别为bridgehostnone,其中名为bridge的网络就是默认
    bridge驱动网络,也是容器创建时默认的网络管理方式,配置后可以与宿主机通信从
    而实现与互联网通信功能,而hostnone属于无网络,容器添加到这两个网络时不能与
    外界网络通信。
    这里介绍的三种网络bridgehostnone都是在非集群环境下Docker提供的默认网络,
    而在Docker Swarm集群环境下,除了这三种默认网络外,Docker还提供了
    docker_gwbridgeingress两种默认网络。

    [root@iZ1la3d1xbmukrZ ~]# docker network ls
    NETWORK ID          NAME                  DRIVER              SCOPE
    13143a2ccae6        bridge                bridge              local
    4efdb0be3651        docker_gwbridge       bridge              local
    56aa491f712e        host                  host                local
    k8x8k7adous1        host-network          overlay             swarm
    b1jvzriu9u1j        ingress               overlay             swarm
    cc6a477b93cf        none                  null                local
    d311f0917bd1        yearning-go_default   bridge              local

    2、查看容器使用的网络情况:

    [root@iZ1la3d1xbmukrZ ~]# docker network inspect bridge
    [
        {
            "Name": "bridge",
            "Id": "13143a2ccae6ecc2bf8a297700572f68ebba3915f9d19d10905147ddd6256f74",
            "Created": "2020-03-19T22:52:07.494923673+08:00",
            "Scope": "local",
            "Driver": "bridge",
            "EnableIPv6": false,
            "IPAM": {
                "Driver": "default",

     自定义网络

    虽然Docker提供的默认网络的使用比较简单,但是为了保证各容器中应用的安全性,在
    实际开发中更推荐使用自定义的网络进行容器管理。在Docker中,可以自定义bridge
    络、overlay网络,也可以创建network plugin(网络插件)或者远程网络以实现容器网
    络的完全定制和控制。
    网络类型

    Bridge networks(桥接网络):
    为了保证容器的安全性,我们可以使用基于bridge的驱动创建新的bridge网络,这种
    基于bridge驱动的自定义网络可以较好的实现容器隔离。需要说明的是,这种用户自
    定义的基于bridge驱动的网络对于单主机的小型网络环境管理是一个不错的选择,但
    是对于大型的网络环境管理(如集群)就需要考虑使用自定义overlay集群网络。

    Overlay network in swarm modeSwarm集群中的覆盖网络)
    Docker Swarm集群环境下可以创建基于overlay驱动的自定义网络。为了保证安
    全性,Swarm集群使自定义的overlay网络只适用于需要服务的群集中的节点,而不
    会对外部其他服务或者Docker主机开放。

    Custom network plugins(定制网络插件)
    如果前面几种自定义网络都无法满足需求时,就可以使用Docker提供的插件来自定
    义网络驱动插件。自定义网络插件会在Docker进程所在主机上作为另一个运行的进
    程。自定义网络驱动插件与其他插件遵循相同的限制和安装规则,所有插件都使用
    Docker提供的插件API,并且有一个包含安装、启动、停止和激活的生命周期。由于
    自定义网络插件使用较少,所以只需了解即可。

    测试如下:

     1docker network create ‐‐driver bridge isolated_nw
    创建一个基于bridge驱动的名称为isolated_nw的网络。其中‐‐driver(可简写为‐d)用
    于指定网络驱动类型,isolated_nw就是新创建的网络名称。需要说明的是,‐‐driver
    bridge可以省略,省略时Docker会默认使用基于bridge驱动来创建新的网络。

    [root@iZ1la3d1xbmukrZ ~]# docker network create --driver bridge isolated_nw
    346b5fda354eb586b0ad072f5633d4cbc2720a0bae97647bf33f4a28d711b8e0

    2docker run ‐itd ‐‐name=nwtest ‐‐network=isolated_nw busybox
    会创建一个名为nwtest的容器,指令中的‐‐network参数指定了该容器的网络连接为自定义
    isolated_nw。通过docker inspect nwtest指令可以查看启动后的容器详情,来核查
    其网络管理方式.

    [root@iZ1la3d1xbmukrZ ~]# docker run -itd --name=nwtest --network=isolated_nw busybox
    078dfb082e61e0d2cfdc5881ff420de28e300bf642e1f13c64422a55e4362804

    3docker network connect bridge nwtest
    会为容器nwtest另添加一种默认的bridge网络管理方式。再次使用docker inspectnwtest指令查看该容器网络详情

    [root@iZ1la3d1xbmukrZ ~]# docker network connect bridge nwtest
    [root@iZ1la3d1xbmukrZ ~]# docker inspect nwtest
    [
        {
            "Id": "078dfb082e61e0d2cfdc5881ff420de28e300bf642e1f13c64422a55e4362804",
            "Created": "2020-03-22T14:06:51.258448555Z",
            "Path": "sh",
            "Args": [],
            "State": {
                "Status": "running",
                "Running": true,
                "Paused": false,

    4docker network disconnect isolated_nw nwtest
    断开网络连接的指令与连接网络的指令类似,在使用时也需要指定网络名称和容器名称

    [root@iZ1la3d1xbmukrZ ~]# docker network disconnect isolated_nw nwtest
    [root@iZ1la3d1xbmukrZ ~]# docker inspect nwtest
    [
        {
            "Id": "078dfb082e61e0d2cfdc5881ff420de28e300bf642e1f13c64422a55e4362804",
            "Created": "2020-03-22T14:06:51.258448555Z",
            "Path": "sh",
            "Args": [],
            "State": {
                "Status": "running",
                "Running": true,
                "Paused": false,
                "Restarting": false,

    5docker network rm isolated_nw
    移除名称为isolated_nw的自定义网络。当网络移除成功后,会返回网络名称。 

    [root@iZ1la3d1xbmukrZ ~]# docker network rm isolated_nw
    isolated_nw

    容器间的网络通信
    1、创建两个使用默认的bridge网络的容器

    [root@iZ1la3d1xbmukrZ ~]# docker run -itd --name=c1 busybox
    6091aca11b327f67a1836588979775005e33bfeb4c904f0ec4f68c1dcdee3296
    [root@iZ1la3d1xbmukrZ ~]# docker run -itd --name=c2 busybox
    68ecae0540b9a16aef9ec6db87dcacf0cabf976ac3d3c5330819231074bda14e

    2、创建一个使用自定义的isolated_nw网络(需要预先创建)的容器

    [root@iZ1la3d1xbmukrZ ~]# docker network inspect bridge
    [
        {
            "Name": "bridge",
            "Id": "13143a2ccae6ecc2bf8a297700572f68ebba3915f9d19d10905147ddd6256f74",
            "Created": "2020-03-19T22:52:07.494923673+08:00",
            "Scope": "local",
            "Driver": "bridge",
            "EnableIPv6": false,
    
         "6091aca11b327f67a1836588979775005e33bfeb4c904f0ec4f68c1dcdee3296": {
                    "Name": "c1",
                    "EndpointID": "06128ab2dec0248bdf918f0e8926fa32e5c3ad28185fb76180ce89133a02cc5d",
                    "MacAddress": "02:42:ac:11:00:0b",
                    "IPv4Address": "172.17.0.11/16",
                    "IPv6Address": ""
                },
                "68ecae0540b9a16aef9ec6db87dcacf0cabf976ac3d3c5330819231074bda14e": {
                    "Name": "c2",
                    "EndpointID": "a45d75ef903a97226a8a642f033edc1c4e7b925fb26c934afa2408d266d71e5a",
                    "MacAddress": "02:42:ac:11:00:0c",
                    "IPv4Address": "172.17.0.12/16",
                    "IPv6Address": ""
                },
    [root@iZ1la3d1xbmukrZ ~]# docker network create --driver bridge isolated_nw
    143edd51d452ea06d9fa57167c3f7b19bc3fd02b82694674aa3f291e902a4508
    [root@iZ1la3d1xbmukrZ ~]# docker run --network=isolated_nw -itd --name=c3 busybox
    3ccac4538365b596fbce28680c5cd75d8d79405181863536196b53dfd52cad66

    3、为container2容器新增一个自定义的isolated_nw网络连接

    [root@iZ1la3d1xbmukrZ ~]# docker network connect isolated_nw c2

    C1172.17.0.11 bridge

    C2172.17.0.12 172.20.0.3 bridgeisolated_nw

     

     C3172.20.0.2 isolated_nw】 

     

     测试如下:

    [root@iZ1la3d1xbmukrZ ~]# docker attach c1
    / # ping -w 4 172.17.0.12
    PING 172.17.0.12 (172.17.0.12): 56 data bytes
    64 bytes from 172.17.0.12: seq=0 ttl=64 time=0.165 ms
    64 bytes from 172.17.0.12: seq=1 ttl=64 time=0.094 ms
    64 bytes from 172.17.0.12: seq=2 ttl=64 time=0.069 ms
    64 bytes from 172.17.0.12: seq=3 ttl=64 time=0.076 ms
    
    --- 172.17.0.12 ping statistics ---
    5 packets transmitted, 4 packets received, 20% packet loss
    round-trip min/avg/max = 0.069/0.101/0.165 ms
    / # ping -w 4 172.20.0.3
    PING 172.20.0.3 (172.20.0.3): 56 data bytes
    
    --- 172.20.0.3 ping statistics ---
    5 packets transmitted, 0 packets received, 100% packet loss

     结论:

    不同容器之间想要相互通信必须在同一个网络环境下;使用默认bridge网络管理的容器可以
    使用容器IP进行通信,但无法使用容器名称进行通信;而使用自定义网络管理的容器则可以
    使用容器IP进行通信
  • 相关阅读:
    UVALive 6319 暴力
    UVALive 6322 最大匹配
    uvalive 6323 状态压缩DP
    hdu 3874 树状数组
    hdu 3721 树的直径
    hdu 4258 斜率DP
    组队练习 2011年福州全国邀请赛
    FZU 2041 二分枚举
    Kafka基础教程(三):C#使用Kafka消息队列
    Kafka基础教程(二):Kafka安装
  • 原文地址:https://www.cnblogs.com/dalianpai/p/12549203.html
Copyright © 2011-2022 走看看