进阶Docker4:网桥模式、主机模式与自定义网络

发布时间:2024年01月17日

目录

?网络相关

子网掩码

网关

规则

docke网络配置

bridge模式

host模式

创建自定义网络(自定义IP)


?网络相关


  • IP
  • 子网掩码
  • 网关
  • DNS
  • 端口号

子网掩码


互联网是由许多小型网络构成的,每个网络上都有许多主机,这样便构成了一个有层次的结构。
IP 地址在设计时就考虑到地址分配的层次特点,将每个 IP 地址都分割成网络号和主机号两部分,以便于IP地址的寻址操作。
子网掩码是 “255.255.255.0” 的网络:
最后面一个数字可以在 0~255 范围内任意变化,因此可以提供 256 IP 地址。但是实际可用的 IP
址数量是 256-2 ,即 254 个,因为主机号不能全是 “0” 或全是 “1”
子网掩码是 “255.255.0.0” 的网络:
后面两个数字可以在 0~255 范围内任意变化,可以提供 2552 IP 地址。但是实际可用的 IP 地址数量
2552-2 ,即 65023 个。 IP 地址的子网掩码设置不是任意的。如果将子网掩码设置过大,也就是说子网范围扩大,那么,根
据子网寻径规则,很可能发往和本地主机不在同一子网内的目标主机的数据,会因为错误的判断而
认为目标主机是在同一子网内,那么,数据包将在本子网内循环,直到超时并抛弃,使数据不能正
确到达目标主机,导致网络传输错误;如果将子网掩码设置得过小,那么就会将本来属于同一子网
内的机器之间的通信当做是跨子网传输,数据包都交给缺省网关处理,这样势必增加缺省网关的负
担,造成网络效率下降。
因此,子网掩码应该根据网络的规模进行设置。如果一个网络的规模不超过 254 台电脑,采用
“255.255.255.0” 作为子网掩码就可以了,现在大多数局域网都不会超过这个数字,因此
“255.255.255.0” 是最常用的 IP 地址子网掩码;假如在一所大学具有 1500 多台电脑,这种规模的局
域网可以使用 “255.255.0.0”

网关


网关实质上是一个网络通向其他网络的IP地址。 路由器(Windows下叫默认网关,网关就是路由,路由就是网关不要蒙)

规则

计算机的 IP 地址由两部分组成,一部分为网络标识,一部分为主机标识,同一网段内的计算机网络部分相同,主机部分不同同时重复出现。
路由器连接不同网段,负责不同网段之间的数据转发,交换机连接的是同一网段的计算机。通过设置网络地址和主机地址,在互相连接的整个网络中保证每台主机的IP 地址不会互相重叠,即 IP 地址具有了唯一性。
在计算机网络中,主机 ID 全部为 0 的地址为网络地址,而主机 ID 全部为 1 的地址为广播地址
2 个地址是不能分配给主机用的。

docke网络配置


当你安装了docker,它会自动创建3个网络,可以使用 docker network ls 命令来查看

  • bridge
  • host
当你运行一个容器的时候,可以使用 --network 参数来指定你的容器连接到哪一个网络。

bridge模式


Docker 进程启动时,会在主机上创建一个名为 docker0 的虚拟网桥,此主机上启动的 Docker 容器会连接到这个虚拟网桥上。
虚拟网桥的工作方式和物理交换机类似,这样主机上的所有容器就通过交换机连在了一个二层网络中。
docker0 子网中分配一个 IP 给容器使用,并设置 docker0 IP 地址为容器的默认网关。
在主机上创建一对虚拟网卡 veth pair 设备, Docker veth pair 设备的一端放在新创建的容器中,并命名为eth0 (容器的网卡),另一端放在主机中,以 vethxxx 这样类似的名字命名,并将这个网络设备加入到docker0 网桥中。
bridge 模式是 docker 的默认网络模式,不写 --net 参数,就是 bridge 模式。
  • 查看bridge信息
docker inspect brid
  • 打开容器
docker run -itd --net=bridge --name cname iname
  • 查看docker0网桥
  • 查看容器网络
ip addr
ifconfig
docker0 就像是一个路由器,容器就像是路由器下的设备,它们在同一个网段内,可以互相 ping 通。
每个容器都有自己独立的ip,如果外部需要访问 需要设置端口映射? 默认模式都是网桥
  • 外部访问

设置端口映射

docker run -itd --name bridge03 -p 8081:8080 spring:1.0

-p参数可以出现多次,绑定多个端口号

docker run -itd --name bridge05 -p 8082:8080 -p 8083:8080 spring:1.0

?使用mysql?

docker run -it --name c1 centos

mkdir -p /mysql/{conf,data}

grant all on *.* to dbl@'%' identified by '123456';

修改了application.xml 文件ip地址后,重启容器 ip 地址会发生改变。

注:?网桥中的ip只能自动生成

host模式


如果启动容器的时候使用 host 模式,那么这个容器将不会获得一个独立的 Network Namespace ,而是和宿主机共用一个Network Namespace
容器将不会虚拟出自己的网卡,配置自己的 IP 等,而是使用宿主机的 IP和端口。
但是,容器的其他方面,如文件系统、进程列表等还是和宿主机隔离的;
比如主机端口号是8080那么容器的端口号也是8080,共用一个端口号。

?主机模式 容器与主机共用端口与网络

docker run -itd \
--name t1 \
--net host \
tomcat:8.5.20

创建自定义网络(自定义IP)


  • 支持自定义ip
  • 支持容器名的方式

手动指定网段

docker network create --subnet=172.20.0.0/16 mynet

固定ip启动容器

docker run -it \
--name t1 \
-p 8080:8080 \
-v /soft:/usr/local/tomcat/webapps \
--net mynet \
--ip 172.20.0.100 \
tomcat:8.5.20

 
docker run \
--name m1 \
-v /mysql/conf/my.cnf:/etc/my.cnf \
-v /mysql/data:/var/lib/mysql \
--privileged=true \
-e MYSQL_ROOT_PASSWORD=123456 \
--net mynet \
--ip 172.20.0.99 \
-d mysql/mysql-server:5.7

指定两个不同的容器

----------------mynet
docker run  -it \
--name c1 \
--net mynet \
--ip 172.20.100.100 \
-d centos

----------------bridge
docker run  -it \
--name c2 \
-d centos

让c1连接到bridge网络中
docker network connect bridge c1

测试

docker exec -it c1 ping mynet

docker exec -it c1 ping 172.20.100.100

跨网桥测试

docker exec -it c2 ping mynet

文章来源:https://blog.csdn.net/d2916172682/article/details/135640415
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。