欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 八卦 > docker网络

docker网络

2024/10/24 17:19:01 来源:https://blog.csdn.net/QChestnut/article/details/141168398  浏览:    关键词:docker网络

1、桥接模式(默认模式)

1.1概念

部署好docker服务,启动之后,创建一个虚拟网桥(docker0),这是一个虚拟的网络设备,类似于交换机。

每一次运行容器之后,docker0就会从网段当中分配一个ip地址给这个容器。

容器与主机之间通信:通过桥接模式进行

容器与容器之间通信:多个容器都在同一网段,都在同一网桥,可以通过自己的ip地址进行通信

1.2工作原理

桥接模式:连接两个不同网络段的设备,共享通信的一种方式

基于mac地址转发数据帧

当172.17————192.168进行通信,桥接设备查看目标的mac地址。

路由器做的ARP广播,如果在mac地址表,桥接设备直接把数据帧转发目标的相应接口;如果不在,ARP广播,所有接口都会收到数据报文,有则响应,无则丢弃。

桥接模式在物理和数据链路层上工作,学习和转发mac地址,用于局域网内部的连接和扩展

vethpair方式生成一个对应容器的虚拟网卡

docker网桥是宿主机虚拟出来的,并不是真正的网络设备,外部是没有办法通过寻址找到的,客户端是无法直接访问容器的ip地址,如果希望外部网络能够访问,要通过映射容器的端口到宿主机

桥接模式的宿主机和容器之间的端口映射,实际上是做了nat地址的转换,容器的私有ip映射到主机的ip上,从而实现容器与外部网络的通信,隐藏了容器内部的真实ip地址

容器要保持一直运行,必须要指定有一个运行的程序。nginx镜像当中声明好了运行程序

nginx -g “daemon 0ff”:保持nginx一直在后台运行,-itd不加d表示前台运行展示运行结果,加d表示后台运行

2、host模式

容器不会虚拟出自己的网卡,也不会配置自己的ip。容器全部使用宿主机的ip和端口。

用于端口不重复的类型的应用,docker本身是单节点模式,适用于部署单个服务的应用程序

创建方式
方法一:
docker run -itd --name nginx1 --network host nginx:1.22方法二:
docker run -itd --name nginx2 --net=host nginx:1.22

3、container模式

容器和容器之间共用一个network namespace,不是和宿主机共享

新创建的容器也不会有自己的网卡、配置自己的ip,而是和一个容器共享ip、端口,除了网络之外,其他的比如文件系统等都是隔离的。

#创建一个新的容器test1
docker run -itd --name test1 centos:7 /bin/bash#查看ip
docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' test1#使用container模式创建test2容器
docker run -itd --name test2 --net=container:test1 centos:7 /bin/bash#查看进程号
docker inspect -f '{{.State.Pid}}' test1
docker inspect -f '{{.State.Pid}}' test2#列出相关命名空间的信息
ls -l /proc/进程号/ns

4、none模式

创建容器之后,容器有自己的网络命名空间,但是不会进行任何网络配置,没有网卡、ip、端口,只有本地的lo回环端口,没有办法进行联网。网络是封闭的,一般用于内部调试

#创建容器nginx1
docker run -itd --name nginx1 --net=none nginx:1.22#获取容器的详细信息
docker inspect nginx1

5、自定义网络

和桥接模式一样,只不过我们可以自定义容器的网段和给新创建的容器指定ip地址

只有自定义网络可以在创建容器时指定ip地址

#创建容器test3
docker run -itd --name test3 --network bridge --ip 172.17.0.10 nginx:1.22
出现报错:docker: Error response from daemon: user specified IP address is supported on user defined networks only.
表示只有自定义网络可以在创建容器时指定ip地址,该功能仅在用户定义的网络中受支持#查看网络设备
docker network lsNETWORK ID     NAME      DRIVER    SCOPE
c1ed5d35cb04   bridge    bridge    local
44fd4739715c   host      host      local
eafa46ca1882   none      null      local#创建自定义网络
docker network create --subnet=172.111.0.0/16 mynetwork1#ifconfig查看
br-53d82248e77b: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500inet 172.111.0.1  netmask 255.255.0.0  broadcast 172.111.255.255ether 02:42:a3:c2:3f:4f  txqueuelen 0  (Ethernet)#指定网卡名
docker network create --subnet=172.112.0.0/16 --opt "com.docker.network.bridge.name"="docker2" mynetwork2#ifconfig查看
docker2: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500inet 172.112.0.1  netmask 255.255.0.0  broadcast 172.112.255.255ether 02:42:ca:fa:49:7a  txqueuelen 0  (Ethernet)#指定ip地址
docker run -itd --name nginx2 --net mynetwork1 --ip 172.111.0.10 -p 88:80 nginx:1.22#可以直接访问172.111.0.10

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com