image.png
查看IP:
本地回环地址
阿里云内网地址
docker地址

测试

拉取一个Tomcat镜像

  1. # 拉取
  2. docker pull tomcat
  3. # 运行
  4. [root@tl ~]# docker run -d -p 5000:8080 --name tomcat01 tomcat
  5. # 进入容器
  6. [root@tl ~]# docker exec -it tomcat01 bash

容器内输入ip addr
image.png

服务器Ping一下
image.png

我们每启动一个Docker容器。 docker就会给docker容器分配一个IP。 只要安装Docker就会有一个网卡为docker0
的侨接模式。 使用的技术是evth-pair技术。

再次测试ip addr
image.pngimage.png

image.png

再多启动几个Tomcat容器
image.png
image.pngimage.png

Docker0的Ip是 172.18.0.1 充当公用的一个路由器

所有容器不指定网络的情况下,都是docker0路由的。docker会给我们的容器分配一个默认可用的IP


容器互联link

问题

三个Tomcat容器
image.png
image.png
可以看到通过服务名称是ping不通的。

所以如何解决呢?

[root@tl ~]# docker run -it -d -P --name tomcat01 --link tomcat03 tomcat

创建一个tomcat01通过 —link关联已有的tomcat03

image.png
但是反向Ping, 失败了。
image.png

docker network ls

image.png

[root@tl ~]# docker  network inspect d25f8ad3c3b3

[
    {
        "Name": "bridge",
        "Id": "d25f8ad3c3b326b77c5767df69811e9a2db73486b35e767a074725aa0402b5c7",
        "Created": "2020-09-04T10:40:58.197019647+08:00",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": null,
            "Config": [
                {
                    "Subnet": "172.18.0.0/16", // 默认的IP Docker0
                    "Gateway": "172.18.0.1" // 网关
                }
            ]
        },
        "Internal": false,
        "Attachable": false,
        "Ingress": false,
        "ConfigFrom": {
            "Network": ""
        },
        "ConfigOnly": false,

                // 容器
        "Containers": {
            "4473d009e1f3fcc23c5164bf9c5b1c4975315f6bbf9b05c51442a0d7ffa723c4": {
                "Name": "tomcat03", // Tomcat03
                "EndpointID": "861bbd3557fd91619b12ca039124c0e31a93e04bf535099050c0f21178083eec",
                "MacAddress": "02:42:ac:12:00:04",
                "IPv4Address": "172.18.0.4/16",
                "IPv6Address": ""
            },
            "7c061b6ec7e8763445063a4d0ebcbc2ab57f4e04a1a7d05989d9c160c079e545": {
                "Name": "tomcat01", // Tomcat01
                "EndpointID": "fee9be7792d99f607b6a91e65f4b4e9edcf6ee3d6a57893b2a9aa0e593145cf5",
                "MacAddress": "02:42:ac:12:00:02",
                "IPv4Address": "172.18.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": {}
    }
]

我们刚才通过tomcat01 绑定了 tomcat03。
image.png

通过查看本地hosts文件。 发现直接有映射。

自定义网络

查看所有网路

docker network ls

image.png

网络模式

  • bridge 桥接模式。
  • host 主机模式,和宿主共享网络
  • none 不配置网络
  • container 容器内网络连通

测试

首先清除以前的容器

docker rm -f $(docker ps -aq)

创建容器

# 默认创建容器 --net bridge是默认添加的
docker run 
    -d 
  -p 5000:8080 
  --name tomcat01 
    --net bridge
tomcat

自定义网络

 $ docker network create  --help


Usage:    docker network create [OPTIONS] NETWORK

Create a network

Options:
      --attachable           Enable manual container attachment
      --aux-address map      Auxiliary IPv4 or IPv6 addresses used by Network driver (default map[])
      --config-from string   The network from which copying the configuration
      --config-only          Create a configuration only network
  -d, --driver string        Driver to manage the Network (默认 "bridge")
      --gateway strings      IPv4 or IPv6 Gateway for the master subnet
      --ingress              Create swarm routing-mesh network
      --internal             Restrict external access to the network
      --ip-range strings     Allocate container ip from a sub-range
      --ipam-driver string   IP Address Management Driver (default "default")
      --ipam-opt map         Set IPAM driver specific options (default map[])
      --ipv6                 Enable IPv6 networking
      --label list           Set metadata on a network
  -o, --opt map              Set driver specific options (default map[])
      --scope string         Control the network's scope
      --subnet strings       Subnet in CIDR format that represents a network segment
docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet

image.png

[root@tl ~]# docker network inspect mynet
[
    {
        "Name": "mynet",
        "Id": "19e2a7bd09044a818e0816d4ecc800baac6849fe7cf58cddc6c1887e76eb2940",
        "Created": "2020-09-04T11:43:00.5307361+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": {}
    }
]

至此,自己的网络已经创建好了。

docker run -d  -p 5000:8080  --name tomcat01  --net mynet tomcat

image.png

网络连通

➜ docker network --help

Usage:    docker network COMMAND

Manage networks

Commands:
  connect     连接一个容器到一个网络
  create      Create a network
  disconnect  Disconnect a container from a network
  inspect     Display detailed information on one or more networks
  ls          List networks
  prune       Remove all unused networks
  rm          Remove one or more networks

Run 'docker network COMMAND --help' for more information on a command.
docker network connect [容器ID]mynet [网络ID]

# 例子
[root@tl ~]# docker network  connect mynet a93cfbe0f7d4

连通之后就是将容器放到网络下

docker network inspect mynet
[root@tl ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED              STATUS              PORTS                     NAMES
# 默认网络
a93cfbe0f7d4        tomcat              "catalina.sh run"   About a minute ago   Up About a minute   0.0.0.0:32769->8080/tcp   tomcatBase
# 自定义网络
b7c591aee43f        tomcat              "catalina.sh run"   11 minutes ago       Up 11 minutes       0.0.0.0:5000->8080/tcp    tomcat01
[root@tl ~]# docker network inspect mynet
[
    {
        "Name": "mynet",
        "Id": "19e2a7bd09044a818e0816d4ecc800baac6849fe7cf58cddc6c1887e76eb2940",
        "Created": "2020-09-04T11:43:00.5307361+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": {
        // 刚刚添加的。
            "a93cfbe0f7d4333c3c9ee6d5984246e09579a0872e1e0039892f0940050802cf": {
                "Name": "tomcatBase",
                "EndpointID": "86e40f177cf3d391ef560e9ee672302498839b3a5f789ce2f7aa9947b82ce212",
                "MacAddress": "02:42:c0:a8:00:03",
                "IPv4Address": "192.168.0.3/16",
                "IPv6Address": ""
            },


            "b7c591aee43f7794ee5ed1d00cb6e5070bb2c68cef03c3825c6636085cc7e47a": {
                "Name": "tomcat01",
                "EndpointID": "dbfe791268d4c9d300f98dae712e5be6ac69a02202934920dd5161f7ed96de98",
                "MacAddress": "02:42:c0:a8:00:02",
                "IPv4Address": "192.168.0.2/16",
                "IPv6Address": ""
            }
        },
        "Options": {},
        "Labels": {}
    }
]

一个容器两个IP

image.png