Libnetwork官方示例

我们初步了解了libnetwork中各个组件和驱动后,为了能深入的理解libnetwork中的CNM模型和熟悉docker network子命令的使用,我们来通过libnetwork官方github上的示例进行验证一下,如下图所示:
docker设置不同网络和迁移到指定网络_第1张图片

在上图示例中,使用Docker 默认的bridge驱动进行演示。在此例中,会在Docker上组成一个网络拓扑的应用:

它有两个网络,其中backend network为后端网络,frontend network则为前端网络,两个网络互不联通。(这两个网络呆会儿演示的时候会创建出来)
其中容器1和容器3各拥有一个端点,并且分别加入后端网络(backend network)和前端网络(frontend network)中。而容器2则有两个端点,它们分别加入到后端网络和前端网络。

1、通过以下命令分别创建名为backend、frontend两个网络:

  docker network create backend
  docker network create frontend

2、使用docker network ls 可以查看这台主机上的所有Docker网络:

  root@centos-mysql01:~# docker network ls
   NETWORK ID          NAME                DRIVER              SCOPE
   4bb7db8603b3        backend              bridge                local
   89eecd0d67f8         bridge                  bridge                local
   4f90775dde19         frontend               bridge               local
   68a185af2068         host                     host                   local
   7121b3b8e5e9        none                    null                    local

除了刚才创建的backend和frontend之外,还有3个网络。这3个网络是Docker daemon默认创建的,分别使用了3种不同的驱动,而这3种驱动则对应了Docker原来的3种网络模式。需要注意的是,3种内置的默认网络是无法使用docker network rm进行删除的,不信你们试一下。

3、接下来创建3个容器,并使用下面的命令将名为c1和c2的容器加入到backend网络中,将名为c3的容器加入到frontend网络中:

   docker run -itd --name c3 --net backend centos
   docker run -itd --name c2 --net backend centos
   docker run -itd --name c1 --net frontend centos

然后,分别进入c1和c3容器使用ping命令测试其与c2的连通性,因为c2和c3都在backend网络中,所以两者可以连通。但是,因为c2和c1不在一个网络中,所以两个容器之间不能连通:
docker设置不同网络和迁移到指定网络

docker exec -it c2 /bin/bash

  #  yum install -y net-tools  #安装网络工具包
  # ping c1      #处于frontend 不通
  # ping c2      #处于backend 通
  # ping c3      #处于backend 通

使用如下命令将c2容器加入到backend网络中

# docker network connect backend  c1

发现现在ip地址是通的了