容器间通信之网络使用

1.容器间通信

    说明:容器之间通过网络进行相互通信

    官方说明:

当 Docker 启动时,会自动在主机上创建一个 docker0 虚拟网桥,实际上是 Linux 的一个 bridge,可以理解为一个软件交换机。它会在挂载到它的网口之间进行转发。
同时,Docker 随机分配一个本地未占用的私有网段(在 RFC1918 中定义)中的一个地址给 docker0 接口。比如典型的 172.17.42.1,掩码为 255.255.0.0。此后启动的容器内的网口也会自动分配一个同一网段(172.17.0.0/16)的地址。
当创建一个 Docker 容器的时候,同时会创建了一对 veth pair 接口(当数据包发送到一个接口时,另外一个接口也可以收到相同的数据包)。这对接口一端在容器内,即 eth0;另一端在本地并被挂载到 docker0 网桥,名称以 veth 开头(例如 vethAQI2QT)。通过这种方式,主机可以跟容器通信,容器之间也可以相互通信。Docker 就创建了在主机和所有容器之间一个虚拟共享网络。

2.网络总结

    1)、默认docker在创建容器时将所有容器都连接到docker0网桥上,默认在docker0网桥的容器都可以使用容器内ip地址进行通信。

    2) 、 默认docker在创建容器时将所有容器都连接到docker0网桥上,默认在docker0网桥的容器都可以使用容器名字作为容器ip地址进行通信

                             注意事项:使用容器名称,必须自定义网桥,不能使用默认docker0。

实际生产环境中,一般都不会用docker0,通过自定义网桥。一般一个项目一组容器一个网桥。

 

3.自定义网桥实现网桥中的一组容器通信

查看容器网络类型的命令: docker  network ls

 

NETWORK ID     NAME                DRIVER    SCOPE
c4cf0ba85d6e   bridge              bridge    local
24769111bbeb   compose-nginx_qwf   bridge    local
5cf65390fed0   host                host      local
47fdd9ea183e   none                null      local

 

 bridge模式:默认方式

1)创建自定义桥

docker network --help

[root@VM-4-16-centos ~]# 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

通过:docker  network  create   -d    bridge(默认)  网络名称  创建网桥

docker   network  create   -d bridge  class-web 
或者
docekr   network  create  class-web 

查看有哪些网络:

docker  network ls 
NETWORK ID     NAME                DRIVER    SCOPE
c4cf0ba85d6e   bridge              bridge    local
afb78ee31c62   class-web           bridge    local
24769111bbeb   compose-nginx_qwf   bridge    local
5cf65390fed0   host                host      local
47fdd9ea183e   none                null      local

查看某一个网络细节:

docker network inspect   网络id/网络名

删除某一个网络:

docker network rm   网络id/网络名    # 

docker network prune   网络id/网络名 # 删除所有未被用到的网络名

运行多个容器在指定网络中

 a.启动时明确指定容器使用哪个网络

        docker   run    -d   --network  网络名称

 b.启动后容器加入到某个网络

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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

posted on 2023-04-24 21:07  一先生94  阅读(38)  评论(0编辑  收藏  举报

导航