美文网首页
Docker-12-容器网络

Docker-12-容器网络

作者: 冷风_f818 | 来源:发表于2019-05-28 14:51 被阅读0次

要构建具有安全的一致行为的web应用程序,可以使用Docker网络特性.根据定义,网络为容器实现了完全隔离.因此,控制应用程序所在的网络很重要,Docker容器网络为您提供了这种控制能力.

默认网络

docker提供了三种网络,可以通过docker network ls命令去查看,结果如下:

image

前面三个就是docker默认提供的,运行容器的时候可以通过--net来指定网络,先来看下这三个默认的网络分别是怎样的

  • bridge: 表示所有Docker安装中都存在的docker0网络. 除非使用docker run --net=<network>选项另行指定,否则Docker守护进程默认情况下会将容器连接到此网络,在主机上使用ifconfig命令,可以看到此网桥是主机的网络堆栈的一部分
  • none: 意味着不指定网络,使用这个网络的容器中没有网卡.
  • host: 会将容器加入宿主机所在的网络中,在使用这个网络的容器中其网络配置和宿主机一样

bridge网络详解

查看bridge网络的详细信息,命令如下:

docker network inspect bridge

返回值:

[
    {
        "Name": "bridge",
        "Id": "e73fffb9d7ea78c02f9fdcabd33377054ae1f391ed883d8b4c6141f2ee99b101",
        "Created": "2019-04-23T09:36:04.07923852+08:00",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": null,
            "Config": [
                {
                    "Subnet": "172.17.0.0/16",
                    "Gateway": "172.17.0.1"
                }
            ]
        },
        "Internal": false,
        "Attachable": false,
        "Containers": {
            "dc37d28c293f8568e396f2c788b43f1fc1e293b88f85232a6c5ae550a099493e": {
                "Name": "registry",
                "EndpointID": "8d31b605406c7aa857366af422eca1e859cbb6610bb4a166c61c893866f006df",
                "MacAddress": "02:42:ac:11:00:02",
                "IPv4Address": "172.17.0.2/16",
                "IPv6Address": ""
            }
        },
        "Options": {
            "com.docker.network.bridge.default_bridge": "true",
            "com.docker.network.bridge.enable_icc": "true",
            "com.docker.network.bridge.enable_ip_masquerade": "true",
            "com.docker.network.bridge.host_binding_ipv4": "0.0.0.0",
            "com.docker.network.bridge.name": "docker0",
            "com.docker.network.driver.mtu": "1500"
        },
        "Labels": {}
    }
]

看一下返回值中的Containers,就是所有使用这个网络的容器的信息,上面这个返回值里面的容器就是我们上文中搭建docker仓库的那个容器

在这个网络中的容器,互相之间可以通过ip进行通信,Docker不支持默认的bridge网络上的服务发现(automatic service discovery),如果你希望默认的bridge网络上的容器之间能够通过名字互相通信,需要在docker run命令中指定--link标识

默认的docker0网络上支持通过端口映射或是使用--link来进行通信,但这种方法很笨重且容易出错,不建议在以后的应用中使用.

自定义网络

为了很好的实现容器之间的网络隔离,可以使用自定义网络,Docker提供了一些网络驱动器(network driver)来方便用户自定义网络,你可以创建bridge networkoverlay network,也可以通过创建自己的网络插件.

你可以创建许多网络,Docker支持将一个容器加入多个网络,只有在同一个网络中的容器之间才可以相互通信,而不能跨网络通信.

创建bridge网络

创建自定义网络最简单的方式就是创建一个bridge网络.这样创建的网络和之间介绍的docker0网络很像. 命令如下:

docker network create --driver bridge isolated_nw
image

创建完成之后,容器就可以使用了.在docker run命令中加入参数,--net=isolated_nw就ok了

同时在容器运行过程中,也可以指定网络,命令如下:

docker network connect 网络名/id 容器名/id 

我们上面创建的这个网络中,加入这个bridge网络的容器必须在同一个宿主机上,同一个网络中的容器之间可以直接通信,但不能和不同网络的容器通信.其示意图如下:

image

在用户自定义的bridge网络中,--link是不支持的,如果你希望外部网络可以访问容器中的应用,可以通过对外暴露端口(expose port)的方式完成.

如果你希望在单个宿主机上创建一个小型网络,bridge网络是很有用的.但如果想创建更大的网络,尤其是跨越多个宿主机的网络,那就需要创建overlay网络

overlay网络这里先不做介绍,想了解的同学可以看这里:原文地址

相关文章

  • Docker-12-容器网络

    述 要构建具有安全的一致行为的web应用程序,可以使用Docker网络特性.根据定义,网络为容器实现了完全隔离.因...

  • docker 收录

    查看容器ip 传送文件 容器 -> 宿主 宿主 -> 容器 进入容器 错误日志查看 网络访问 容器访问宿主网络,输...

  • docker容器之间通讯-network

    docker为容器创建独立的网络环境,实现宿主和容器、容器之间的网络隔离,默认使用bridge模式的网络,实现容器...

  • 配置网络

    概述 容器网络是容器选择连接到其他容器、主机和外部网络的机制。容器的 runtime 提供了各种网络模式,每种模式...

  • 容器安全-容器网络

    1、docker network 从4种容器中各取一个来解释容器网络: 1、docker run --networ...

  • 容器(11)----容器网络

    Docker使用Linux桥接,在宿主机虚拟一个Docker容器网桥(docker0),Docker启动一个容器时...

  • 容器网络

    1. 容器网络模式 1.1 bright 模式 1.2 host 模式 1.3 none模式 1.4 contai...

  • 容器网络

    容器网络 如何创建自定义网络、容器之间如何通信、容器如何与外界交互docker network ls 查看dock...

  • 容器网络

    和容器打交道感觉就像魔法。理解的人就会得心应手,不理解的会觉得很难。幸运的是,我们已经对容器技术有一定的掌握,甚至...

  • 容器网络

    网络栈”,就包括:网卡(Network Interface)、回环设备(Loopback Device)、路由表和...

网友评论

      本文标题:Docker-12-容器网络

      本文链接:https://www.haomeiwen.com/subject/gikdtctx.html