1. 首页
  2. 技术知识

docke自定义网络之容器互联

目录

    前言–link自定义网络提问

前言

在前几期我们介绍了 容器间的互联可以使用
–Link 参数进行设置,这样可以在容器内不只访问ip,也可以访问对应设置的 域名。先温习下。操作之前先清除所有的容器。

–link

# 清除所有容器

$root@VM-8-11-ubuntu:~# docker stop $(docker ps -aq) && docker rm $(docker ps -aq)

88f8f241ca30

765ed1889bfa

$root@VM-8-11-ubuntu:~# docker run -it –name=mybusy02 -d busybox

82aff31e56f3913b3fa883a08ec95960eff88fc9977360a67264c0d53180844b

$root@VM-8-11-ubuntu:~# docker run -it –name mybusy –link mybusy02:mybusy-net -d busybox

b77e9762314f868518f799d3c572dec0b2ce13a684de072fb9f9e925135f6459

$root@VM-8-11-ubuntu:~# docker exec -it mybusy ping mybusy-net

PING mybusy-net (172.17.0.2): 56 data bytes

64 bytes from 172.17.0.2: seq=0 ttl=64 time=0.131 ms

64 bytes from 172.17.0.2: seq=1 ttl=64 time=0.069 ms

64 bytes from 172.17.0.2: seq=2 ttl=64 time=0.069 ms

$root@VM-8-11-ubuntu:~# docker exec -it mybusy 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        mybusy-net 09a4b97fc09d mybusy02    # 我们发现在hosts文件中加入了mybusy02

172.17.0.3        c73be07d21fb

我们发现是互联了,但是如果
mybusy02 想ping 通 mybusy 还需要一个–link。所以就很麻烦,而且官方也推荐我们不要使用 –link 这个参数了。

docker 0 不支持容器名访问接下来我们就到了今天的重头戏,自定义网络了。

自定义网络

# 主要涉及到的命令

$root@VM-8-11-ubuntu:~# 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.

# 这是默认的网络方式 brudge 就是docker 0的网桥

$root@VM-8-11-ubuntu:~# docker network ls

NEТWORK ID     NAME      DRIVER    SCOPE

cf05ea05d3bd   bridge    bridge    local

0ab28e475dc6   host      host      local

e4c628cc77db   none      null      local

我们来使用create来创建自己的网桥网络。基础

# –driver 设置network类型  –subnet 设置子网  /16 = 255*255 个ip 减去0.0 和 255.255 约等于65535

$root@VM-8-11-ubuntu:~# docker network create –driver=bridge –subnet=192.168.0.0/16 my-net

1b668a5439b207d2080d95bffe829139cfa2456d691c8019a245e7f9d5a56970

root@VM-8-11-ubuntu:~# docker network ls

NEТWORK ID     NAME      DRIVER    SCOPE

cf05ea05d3bd   bridge    bridge    local

0ab28e475dc6   host      host      local

1b668a5439b2   my-net    bridge    local

e4c628cc77db   none      null      local

# 查看网络信息

$root@VM-8-11-ubuntu:~# docker network inspect my-net

[

    {

        “Name”: “my-net”,

        “Id”: “1b668a5439b207d2080d95bffe829139cfa2456d691c8019a245e7f9d5a56970”,

        “Created”: “2022-12-01T09:47:21.410882291+08:00”,

        “Scope”: “local”,

        “Driver”: “bridge”,

        “EnableIPv6”: false,

        “IPAM”: {

            “Driver”: “default”,

            “Options”: {},

            “Config”: [

                {

                    “Subnet”: “192.168.0.0/16”

                }

            ]

        },

        “Internal”: false,

        “Attachable”: false,

        “Ingress”: false,

        “ConfigFrom”: {

            “Network”: “”

        },

        “ConfigOnly”: false,

        “Containers”: {},

        “Options”: {},

        “Labels”: {}

    }

]

上面我们介绍了创建网络的方法以及查看的方法 接下来看看使用的方法

# 创建mybusy 容器设置 my-net网络

$root@VM-8-11-ubuntu:~# docker run -it –name mybusy –net=my-net -d busybox

180fbc8b04627762a896d8a85d8cb67063c01a0f3ad8a11352ab4695b022c272

# 创建mybusy02 容器设置 my-net网络

$root@VM-8-11-ubuntu:~# docker run -it –name mybusy02 –net=my-net -d busybox

3c08d592537a9593c960c9664b4724521658f26be7b658a6483e6fbfe30b58a7

# 在容器mybusy ping mybusy02 通了

$root@VM-8-11-ubuntu:~# docker exec -it mybusy ping mybusy02

PING mybusy02 (192.168.0.3): 56 data bytes

64 bytes from 192.168.0.3: seq=0 ttl=64 time=0.110 ms

64 bytes from 192.168.0.3: seq=1 ttl=64 time=0.070 ms

这时我们发现 他们两互相ping通了,这就很完美了。再来看看下面的 my-net 的网络配置

root@VM-8-11-ubuntu:~# docker network inspect my-net

[

    {

        “Name”: “my-net”,

        “Id”: “1b668a5439b207d2080d95bffe829139cfa2456d691c8019a245e7f9d5a56970”,

        “Created”: “2022-12-01T09:47:21.410882291+08:00”,

        “Scope”: “local”,

        “Driver”: “bridge”,

        “EnableIPv6”: false,

        “IPAM”: {

            “Driver”: “default”,

            “Options”: {},

            “Config”: [

                {

                    “Subnet”: “192.168.0.0/16”

                }

            ]

        },

        “Internal”: false,

        “Attachable”: false,

        “Ingress”: false,

        “ConfigFrom”: {

            “Network”: “”

        },

        “ConfigOnly”: false,

        “Containers”: {   # 这时我们发现 这两个容器已经加入到这个网络中了

            “180fbc8b04627762a896d8a85d8cb67063c01a0f3ad8a11352ab4695b022c272”: {

                “Name”: “mybusy”,

                “EndpointID”: “12929182af47e619e3405cab9981ea1671a2bc31f77d3aa589ebcf2c912c12bc”,

                “MacAddress”: “02:42:c0:a8:00:02”,

                “IPv4Address”: “192.168.0.2/16”,

                “IPv6Address”: “”

            },

            “3c08d592537a9593c960c9664b4724521658f26be7b658a6483e6fbfe30b58a7”: {

                “Name”: “mybusy02”,

                “EndpointID”: “61b08372535d751cee726fc01d4e300390e2a090dba20f1d21ba96385a7a621e”,

                “MacAddress”: “02:42:c0:a8:00:03”,

                “IPv4Address”: “192.168.0.3/16”,

                “IPv6Address”: “”

            }

        },

        “Options”: {},

        “Labels”: {}

    }

]

提问

在不同网络的配置下的容器可以互联吗?

答案是可以的。我们可以使用 docker network connect 指令,以下为操作步骤

# 首先查看当前存在同一个网络中mybusy mybusy02 两个容器

$root@VM-8-11-ubuntu:~# docker ps -a

CONTAINER ID   IMAGE     COMMAND   CREATED         STATUS         PORTS     NAMES

3c08d592537a   busybox   “sh”      8 minutes ago   Up 8 minutes             mybusy02

180fbc8b0462   busybox   “sh”      8 minutes ago   Up 8 minutes             mybusy

# 创建一个在默认网络中的 mybusy03

$root@VM-8-11-ubuntu:~# docker run -it –name mybusy03  -d busybox

a95b57c96f400ed44efffcc938bccce15830fa1ab5b55716261e4588c14429cb

# 查看当前的容器

$root@VM-8-11-ubuntu:~# docker ps

CONTAINER ID   IMAGE     COMMAND   CREATED          STATUS          PORTS     NAMES

a95b57c96f40   busybox   “sh”      21 seconds ago   Up 21 seconds             mybusy03

3c08d592537a   busybox   “sh”      8 minutes ago    Up 8 minutes              mybusy02

180fbc8b0462   busybox   “sh”      9 minutes ago    Up 9 minutes              mybusy

# 尝试从 mybusy ping mybusy03 发现是ping 不通的 因为不在同一网端中

$root@VM-8-11-ubuntu:~# docker exec -it mybusy ping mybusy03

ping: bad address ‘mybusy03’

# 这时我们查看docker network connect –help 命令查看

$root@VM-8-11-ubuntu:~# docker network connect –help

Usage:  docker network connect [OPTIONS] NEТWORK CONTAINER

Connect a container to a network

Options:

      –alias strings           Add network-scoped alias for the container

      –driver-opt strings      driver options for the network

      –ip string               IPv4 address (e.g., 172.30.100.104)

      –ip6 string              IPv6 address (e.g., 2001:db8::33)

      –link list               Add link to another container

      –link-local-ip strings   Add a link-local address for the container

# 将mybusy03 加入到 my-net 网络中

$root@VM-8-11-ubuntu:~# docker network connect my-net mybusy03

# 这时我们再 ping 发现通了。是不是很神奇

$root@VM-8-11-ubuntu:~# docker exec -it mybusy ping mybusy03

PING mybusy03 (192.168.0.4): 56 data bytes

64 bytes from 192.168.0.4: seq=0 ttl=64 time=0.197 ms

64 bytes from 192.168.0.4: seq=1 ttl=64 time=0.087 ms

这时我们查看网络发现 mybusy03 已经加入到 my-net中去了。所以就可以ping 通了。

到此这篇关于docke自定义网络之容器互联的文章就介绍到这了,更多相关docke容器互联内容请搜索共生网络以前的文章或继续浏览下面的相关文章希望大家以后多多支持共生网络!

原创文章,作者:starterknow,如若转载,请注明出处:https://www.starterknow.com/105410.html

联系我们