暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Docker网络管理-通讯优化

Coding On Road 2021-04-10
1180

Docker网络管理-通讯优化

   Coding On Road 原创作品,非作者允许不得用于商业,转载请注明出处。

    

首先,docker启动的容器与宿主机通讯是基于docker的网络配置。默认情况下,docker会使用bridge(网桥),默认情况下,所有创建的容器,都会使用一个bridge网桥进行通讯,在同一个网桥下的容器之间可以通过IP地址或主机名称进行通讯。

以下docker网桥优化的方案:

 


上图说明:

1、默认网桥:此网络主要提供搜索引擎服务,所以将ES和两个搜索服务安装指定使用默认网桥。

2、新网桥:提供查询,CRUD及消费队列服务。

3、当搜索量吞吐巨大时,不会因为网络拥堵而影响到正常的业务流程。即当默认网桥搜索量很大时,不会影响到新网桥上的正常业务。

4、 最后,可以通过优化网络,来加快网络响应的速度,当然还要看您总体系的带宽,一般情况下,10M带宽可提供同时5K-1W人在线访问。

 

Docker network命令用于管理网络服务。

[root@server101 ROOT]# docker network --help

 

Usage:  docker network COMMAND

 

Manage networks

 

Commands:

  connect     Connect a container to a network

  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.

 

以下我们以tomcat容器为示例,演示配置docker network

 

Step下载tomcat镜像。

# docker pull tomcat

查看tomcat镜像的内容dockerfile信息,通过inspect命令,可以看到镜像中tomcat的版本为9JDK的版本为11

# docker inspect tomcat

...

 "Env": [

                "JAVA_HOME=/usr/local/openjdk-11",

                "LANG=C.UTF-8",

                "JAVA_VERSION=11.0.10",

                "CATALINA_HOME=/usr/local/tomcat",

                "TOMCAT_NATIVE_LIBDIR=/usr/local/tomcat/native-jni-lib",

                "LD_LIBRARY_PATH=/usr/local/tomcat/native-jni-lib",

                "TOMCAT_MAJOR=9",

                "TOMCAT_VERSION=9.0.45"

            ],

            "Cmd": [

                "/bin/sh",

                "-c",

                "#(nop) ",

                "CMD [\"catalina.sh\" \"run\"]"

            ],

..

 

Step 创建network

首先查询network, 可以看到bridge桥接网卡,此网卡为所有容器默认使用的网卡。

[root@server101 ROOT]# docker network ls

NETWORK ID     NAME      DRIVER    SCOPE

07b3ab36aae3   bridge    bridge    local

8b41b9d3358f   host      host      local

f19e8be47ecc   none      null      local

 现在创建第二个桥接网卡,其中bridge2是我们取的名称,可以为任意名称:

[root@server101 ROOT]# docker network create bridge2

202815b88f4705c76ad86dd6106cc650550913803b134a9b2529c8256a0081d3

[root@server101 ROOT]# docker network ls

NETWORK ID     NAME      DRIVER    SCOPE

07b3ab36aae3   bridge    bridge    local

202815b88f47   bridge2   bridge    local

8b41b9d3358f   host      host      local

f19e8be47ecc   none      null      local

 

查看刚才创建的bridge2网卡的信息,可以通过inspect命令进行查看,  通过查看可以看到新网卡的gateway172.18.0.1

[root@server101 ROOT]# docker inspect bridge2

[

    {

        "Name": "bridge2",

        "Id": "202815b88f4705c76ad86dd6106cc650550913803b134a9b2529c8256a0081d3",

        "Created": "2021-04-10T02:08:53.600082568-04:00",

        "Scope": "local",

        "Driver": "bridge",

        "EnableIPv6": false,

        "IPAM": {

            "Driver": "default",

            "Options": {},

            "Config": [

                {

                    "Subnet": "172.18.0.0/16",

                    "Gateway": "172.18.0.1"

                }

            ]

        },

 

..

 

 

Step 创建容器

现在就可以创建一个容器了,并指定容器所使用的网卡,通过--network参数,即可以指定使用哪一个网卡。

 

# docker run --name tomcat1 -d -p 8081:8080 --network bridge2 \

-v app/docker_volume/tomcat/webapps/:/usr/local/tomcat/webapps/ tomcat

 

创建之后,通过inspect查看容器所使用的ip,可见,此容器使用的是gridge2网卡,它的ip地址为172.18.0.2

# docker inspect tomcat1

....

 "Networks": {

                "bridge2": {

                    "IPAMConfig": null,

                    "Links": null,

                    "Aliases": [

                        "6ffa4300447b"

                    ],

                    "Gateway": "172.18.0.1",

                    "IPAddress": "172.18.0.2",

...

现在再创建一个新的容器,同样指定使用bridge2这个网卡,注意修改容器名称和端口影射。

# docker run --name tomcat2 -d -p 8082:8080 --network bridge2 \

-v /app/docker_volume/tomcat/webapps/:/usr/local/tomcat/webapps/ tomcat

由于tomcat1tomcat2容器,都在bridge2网卡下,所以此两个容器,可以互相通讯。现在进入tomcat1并通过主机名称访问tomcat2进行测试。通过以下测试,可以看出,无论是通过主机名或是ip地址,都可以成功访问:

[root@server101 ROOT]# docker exec -it tomcat1 bash

root@6ffa4300447b:/usr/local/tomcat# curl tomcat2:8080

<html>

        <body>

                Hello Tomcat

        </body>

</html>

root@6ffa4300447b:/usr/local/tomcat# curl 172.18.0.2:8080

<html>

        <body>

                Hello Tomcat

        </body>

</html>

 

Step 查看某个网卡所使用的ip地址

如果想查看一个网卡,具体分配了多少ip地址,可以通过inspect <netwok-name>查看。通过以下命令,可以看到bridge2网卡上,已经有两个容器,分别是tomcat1tomcat2以及他们所使用的ip地址。

[root@server101 ROOT]# docker inspect bridge2

[

    {

        "Name": "bridge2",

"Containers": { 

                name:tomcat2,

                "MacAddress": "02:42:ac:12:00:03",

                "IPv4Address": "172.18.0.3/16",

                "IPv6Address": ""

            },

            {

                Name:tomcat1,

                "MacAddress": "02:42:ac:12:00:02",

                "IPv4Address": "172.18.0.2/16",

                "IPv6Address": ""

            }

        },

..

 

您还可以再次尝试创建两个新的容器,并使用默认网卡,你会发现默认网卡里面的容器与新创建网卡中的容器不可以通讯,因为默认网卡的ip地址为172.17.0.1。不再赘述。


文章转载自Coding On Road,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论