DockerDocker原生网络(hostbridgenone)自定义网络容器通信

Posted dezasseis

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了DockerDocker原生网络(hostbridgenone)自定义网络容器通信相关的知识,希望对你有一定的参考价值。

一、Docker网络基本命令

docker network ls查看网络
docker network inspect 网络查看网络内部信息
docker network create 网络新建网络
docker network connect 网络 容器````将容器加入到该网络中 docker network disconnect 网络 容器断开网络
docker network rm 网络移除网络(需要断开连接到该网络的所有容器)
docker network prune 网络移除未使用的网络

二、原生网络

docker安装后会自动创建3种网络:bridge、host、none
docker安装时会创建一个名为 docker0 的Linux bridge,新建的容器会自动桥接到这个接口。

01_bridge模式(默认)

  • bridge模式下容器没有一个公有ip,只有宿主机可以直接访问,外部主机是不可见的。 容器通过宿主机的NAT规则后可以访问外网。
    在这里插入图片描述在这里插入图片描述
    在这里插入图片描述
  • docker run -d --name nginx 172.25.2.1:5000/webserver
    宿主机可以直接访问
    在这里插入图片描述外部主机不可访问
    在这里插入图片描述
    容器IP地址会变化 但是容器之间不能通过域名解析
  • IP递增且自动替补
    在这里插入图片描述

02_host模式

  • host模式可以让容器共享宿主机网络栈,这样的好处是外部主机与容器直接通信,但是容器的网络缺少隔离性。
    –network=host

在这里插入图片描述

在这里插入图片描述 - docker run -d --name nginx --network=host webserver
宿主机可以访问
在这里插入图片描述外部主机可以访问

在这里插入图片描述

03_ none模式

–network=none

  • none模式是指禁用网络功能,只有lo接口,在容器创建时使用
    在这里插入图片描述

三、自定义网络

  • 自定义网络模式,docker提供了三种自定义网络驱动:
    bridge
    overlay
    macvlan
  • bridge驱动类似默认的bridge网络模式,但增加了一些新的功能, overlay和macvlan是用于创建跨主机网络

01_自定义网桥

  • 创建网络
    docker network create mynet1
    在这里插入图片描述
  • 创建容器并指定网络类型为自定义mynet1:同一网络中直接ping容器名称即可
    在这里插入图片描述
  • ip addr其容器的网关172.18.0.1
    在这里插入图片描述
  • IP递增且自动替补

在这里插入图片描述
在这里插入图片描述

02_自定义网段、网关

  • 创建网络:指定网段、网关
    docker network create --subnet 172.20.0.0/24 --gateway 172.20.0.1 net1
    –subnet:网段
    –gateway:网关
  • 创建容器:指定IP、网络类型
    docker run -it --name demo1 --ip 172.20.0.10 --network net1 busybox
    docker run -it --name demo2 --ip 172.20.0.20 --network net1 busybox
    –ip:指定容器ip
    –network:指定网络
    在这里插入图片描述

03_不同网桥之间通信

docker network connect 网络 容器
在这里插入图片描述

  • 创建容器
    docker run -it --name demo3 busybox
  • 连接网络
    docker network connect net1 demo3
    在这里插入图片描述在这里插入图片描述

四、容器通信

01_Joined容器与link 链接

Joined容器

  • 容器创建时使用 --network=container:容器名指定
  • 共一个享网络栈,可以高效快速通信

在这里插入图片描述

  • 创建容器web_demo(webserver包含nginx服务)
    docker run -d --name web_demo webserver
  • joined容器到busybox上(busybox包含shell及基本命令的小版本环境)
    docker run -it --network container:web_demo busybox
    在这里插入图片描述

link 链接容器
--link name:alias
name:可以是源容器的名称或id
alias:源容器在link下的别名

  • 创建容器
    docker run -d --name demo nginx

  • link容器
    docker run -it --link demo:nginx busybox
    当释放掉demo,开启一个demo1占用172.17.0.2后
    再开demo(IP为172.17.0.4),发现解析随之变化
    在这里插入图片描述在这里插入图片描述

在这里插入图片描述

02_容器访问外网

SNAT(地址转发:MASQUERADE)
在这里插入图片描述

03_外网访问容器

  • 使用docker-proxy进程通信
  • DNAT地址转发
  • 存在其中一个就可访问,双冗余机制

docker run -d --name demo1 -p 80:80 nginx
在这里插入图片描述
在这里插入图片描述
内部访问:
在这里插入图片描述
外部访问
在这里插入图片描述
测试

  • iptables -t nat -D DOCKER 3
    删除后发现依然可以访问(docker-proxy进程存在的前提下)
    在这里插入图片描述内部访问正常

在这里插入图片描述
在这里插入图片描述

  • kill掉docker-proxy进程
    kill 进程id,发现依然可以访问 (在地址转发正常的前提下)
    在这里插入图片描述
    在这里插入图片描述
    kill 17040
    内部访问正常
    在这里插入图片描述
    外部访问正常
    在这里插入图片描述
  • 关闭地址转发和docker-proxy
    iptables -t nat -D DOCKER 3
    内部访问拒绝
    在这里插入图片描述外部访问拒绝
    在这里插入图片描述

04_跨主机通信

添加物理网卡

两台主机:server1,server2

  • 两台主机各添加一块网卡
    -
  • 开启新添加的网卡(所有主机)
    ip link set up eth1
  • 开启混杂模式(所有主机)
    ip link set eth1 promisc on
    在这里插入图片描述
  • 创建 macvlan 类型网络(所有主机)
    docker network create -d macvlan --subnet 172.21.0.0/24 --gateway 172.21.0.1 -o parent=eth1 mac_net1
    在这里插入图片描述
  • server1:创建容器
    docker run -it --rm --network mac_net1 --ip 172.21.0.11 busybox
    在这里插入图片描述
  • server2:创建容器
    在这里插入图片描述上述操作的缺点是容器会独占网卡
    添加子接口
  • 创建子接口:父接口.1父接口.2等等(所有主机)
    docker network create -d macvlan --subnet 172.22.0.0/24 --gateway 172.22.0.1 -o parent=eth1.1 mac_net2
  • server1:创建容器
    docker run -it --rm --network mac_net2 --ip 172.22.0.21 busybox
  • server2:创建容器
    docker run -it --rm --network mac_net2 --ip 172.22.0.22 busybox
    在这里插入图片描述实现跨主机通信
    在这里插入图片描述

以上是关于DockerDocker原生网络(hostbridgenone)自定义网络容器通信的主要内容,如果未能解决你的问题,请参考以下文章

云原生|DockerDocker镜像操作

云原生-Dockerdocker容器自定义DNS解析

[云原生之DockerDocker容器的存储与迁移

云原生 • DockerDocker常用命令总结(值得收藏)

云原生-Dockerdocker镜像制作上传dockerfile命令解析

云原生训练营模块三 Docker核心技术