Docker容器单机网络架构全攻略:从默认桥接到自定义桥接的实战之旅四 创建自定义docker桥接网络4.1 docker中的默认三种网络类型4.1.1 桥接模式(Bridge)4.1.2 主机模式(Host)4.1.3 无网络模式(None)4.2 docker自定义网络类型4.2.1 桥接模式(Bridge)4.2.2 覆盖网络(Overlay)4.2.3 Macvlan4.2.4 主机模式(Host)4.2.5 无网络模式(None)4.3 自定义docker桥接网络实战4.3.1 查看docker网络帮助4.3.2 查看Docker网络/网桥4.3.2 查看docker网络详细信息4.3.3 创建新的docker网络4.3.3.1 查看创建网络帮助4.3.3.2 创建新的docker网络4.3.4 删除docker网络4.3.5 创建docker网络
Docker容器单机网络架构全攻略:从默认桥接到自定义桥接的实战之旅
四 创建自定义docker桥接网络
4.1 docker中的默认三种网络类型
4.1.1 桥接模式(Bridge)
这是Docker的默认网络模式。
当Docker服务启动时,它会在主机上创建一个名为docker0的虚拟网桥,并选择一个与宿主机不同的IP地址和子网分配给docker0网桥。
桥接模式下,Docker会为每个容器分配一个IP地址,并创建一个本地的网络桥接接口,连接所有在该主机上运行的容器。
通过桥接接口,容器可以相互通信,也可以与主机上的其他服务通信。
该模式适用于单主机多容器的情况,特别是当容器之间需要互相通信且需要保持网络隔离时。
4.1.2 主机模式(Host)
在主机模式下,容器与主机共享网络命名空间。
容器将直接使用主机的网络接口和IP地址,而不是创建独立的网络栈。
这意味着容器可以使用主机上的所有网络功能和服务,包括使用主机的IP地址和端口。
主机模式适用于需要容器与主机之间网络性能最大化的场景,或者当容器需要快速访问主机网络服务时。
4.1.3 无网络模式(None)
在无网络模式下,容器没有分配任何网络资源。
这意味着容器内部没有网络接口,也没有IP地址。
无网络模式适用于不需要网络连接的容器,例如用于批处理作业或与外部网络完全隔离的容器。
这三种网络类型各自适用于不同的场景和需求,用户可以根据具体的应用场景来选择最适合的网络类型。
4.2 docker自定义网络类型
Docker支持多种自定义网络类型,以满足不同的容器通信和网络配置需求。以下是Docker自定义网络类型的详细分点表示和归纳。
4.2.1 桥接模式(Bridge)
这是Docker默认的网络模式,但在自定义网络中,桥接模式允许用户创建自己的网络桥,而不是使用默认的docker0桥。
使用
docker network create --driver bridge my_bridge_network命令可以创建一个新的桥接网络。用户可以指定自定义的子网和IP地址范围,如
--subnet=172.17.0.0/16。容器连接到该网络后,可以通过容器名称或别名进行通信。
4.2.2 覆盖网络(Overlay)
Overlay网络用于跨多个Docker主机的容器间通信。
它使用键值存储(如Consul、Etcd或Zookeeper)来管理网络状态,并允许在不同的Docker主机上的容器之间进行通信。
创建Overlay网络时,可以使用
docker network create --driver overlay my_overlay_network命令。Overlay网络特别适用于在分布式系统中部署微服务或容器化应用。
4.2.3 Macvlan
Macvlan网络允许容器拥有自己的MAC地址,并直接连接到物理网络。
这意味着容器可以直接访问外部网络,而无需NAT或端口映射。
使用
docker network create --driver macvlan --subnet=172.17.0.0/16 --gateway=172.17.0.1 -o parent=eth0 my_macvlan_network命令可以创建一个Macvlan网络。其中,
--subnet和--gateway参数指定子网和网关,-o parent=eth0指定父网络接口。
4.2.4 主机模式(Host)
尽管主机模式不是真正的自定义网络类型(因为它不使用Docker的网络管理功能),但它在某些场景下可能被视为一种“自定义”配置。
在主机模式下,容器与宿主机共享网络命名空间,因此容器可以直接访问宿主机的网络接口和IP地址。
这意味着容器将使用宿主机的IP地址和端口,而不是自己的。
4.2.5 无网络模式(None)
在无网络模式下,容器没有自己的网络栈,也不连接到任何网络。
这通常用于不需要网络功能的容器,例如批处理任务或只与本地文件系统进行交互的容器。
Docker提供了多种自定义网络类型,以满足不同的容器通信和网络配置需求。桥接模式适用于单主机容器通信,Overlay和Macvlan模式适用于跨主机容器通信,主机模式允许容器直接使用宿主机的网络接口,而无网络模式则用于不需要网络功能的容器。
4.3 自定义docker桥接网络实战
4.3.1 查看docker网络帮助
[superman@docker ~]$ docker network --help
示例:
[superman@docker ~]$ 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
Run 'docker network COMMAND --help' for more information on a command.
[superman@docker ~]$
4.3.2 查看Docker网络/网桥
[superman@docker ~]$ docker network ls
示例:
[superman@docker ~]$ docker network ls
NETWORK ID NAME DRIVER SCOPE
a480afcf17e0 bridge bridge local
1fe81a14e4c7 host host local
008ae2f75ac2 none null local
[superman@docker ~]$
4.3.2 查看docker网络详细信息
[superman@docker ~]$ docker network inspect a480afcf17e0
示例:
[superman@docker ~]$ docker network inspect a480afcf17e0
[
{
"Name": "bridge",
"Id": "a480afcf17e0d785c70b274bbd1f4bcc3a4a6850e83d22f4c316ecbc998d74c5",
"Created": "2024-06-24T09:46:02.300756433+08:00",
"Scope": "local",
"Driver": "bridge",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": null,
"Config": [
{
"Subnet": "172.17.0.0/16",
"Gateway": "172.17.0.1"
}
]
},
"Internal": false,
"Attachable": false,
"Ingress": false,
"ConfigFrom": {
"Network": ""
},
"ConfigOnly": false,
"Containers": {},
"Options": {
"com.docker.network.bridge.default_bridge": "true",
"com.docker.network.bridge.enable_icc": "true",
"com.docker.network.bridge.enable_ip_masquerade": "true",
"com.docker.network.bridge.host_binding_ipv4": "0.0.0.0",
"com.docker.network.bridge.name": "docker0",
"com.docker.network.driver.mtu": "1500"
},
"Labels": {}
}
]
[superman@docker ~]$
4.3.3 创建新的docker网络
4.3.3.1 查看创建网络帮助
[superman@docker ~]$ docker network create --help
示例:
[superman@docker ~]$ docker network create --help
Usage: docker network create [OPTIONS] NETWORK
Create a network
Options:
--attachable Enable manual container attachment
--aux-address map Auxiliary IPv4 or IPv6 addresses used by Network driver (default map[])
--config-from string The network from which to copy the configuration
--config-only Create a configuration only network
-d, --driver string Driver to manage the Network (default "bridge")
--gateway strings IPv4 or IPv6 Gateway for the master subnet
--ingress Create swarm routing-mesh network
--internal Restrict external access to the network
--ip-range strings Allocate container ip from a sub-range
--ipam-driver string IP Address Management Driver (default "default")
--ipam-opt map Set IPAM driver specific options (default map[])
--ipv6 Enable IPv6 networking
--label list Set metadata on a network
-o, --opt map Set driver specific options (default map[])
--scope string Control the network's scope
--subnet strings Subnet in CIDR format that represents a network segment
[superman@docker ~]$
4.3.3.2 创建新的docker网络
[superman@docker ~]$ docker network create -d bridge br1
示例:
[superman@docker ~]$ docker network create -d bridge br1
43104b870c80ae69948fb201aee3af386ad8d23c7a9dd6a849e1fcf58f3c6798
[superman@docker ~]$
4.3.4 删除docker网络
[superman@docker ~]$ docker network rm br1
[superman@docker ~]$ docker network inspect br1
示例:
[superman@docker ~]$ docker network rm br1
br1
[superman@docker ~]$
[superman@docker ~]$ docker network inspect br1
[]
Error response from daemon: network br1 not found
[superman@docker ~]$
4.3.5 创建docker网络
定义子网/网关/网桥名称
[superman@docker ~]$ docker network create -d bridge --subnet 172.16.1.0/24 --gateway 172.16.1.1 br1
[superman@docker ~]$ docker network inspect br1
示例:
[superman@docker ~]$ docker network create -d bridge --subnet 172.16.1.0/24 --gateway 172.16.1.1 br1
1aa209e7f1ecfb2a31aff43199ac845b90030480b854dba1a3aa2a32cfda74a1
[superman@docker ~]$
[superman@docker ~]$ docker network inspect br1
[
{
"Name": "br1",
"Id": "1aa209e7f1ecfb2a31aff43199ac845b90030480b854dba1a3aa2a32cfda74a1",
"Created": "2024-06-24T11:22:13.046754701+08:00",
"Scope": "local",
"Driver": "bridge",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": {},
"Config": [
{
"Subnet": "172.16.1.0/24",
"Gateway": "172.16.1.1"
}
]
},
"Internal": false,
"Attachable": false,
"Ingress": false,
"ConfigFrom": {
"Network": ""
},
"ConfigOnly": false,
"Containers": {},
"Options": {},
"Labels": {}
}
]
[superman@docker ~]$
[superman@docker ~]$ brctl show
bridge name bridge id STP enabled interfaces
br-1aa209e7f1ec 8000.02420fae1f4d no
docker0 8000.02426622474e no
virbr0 8000.5254002be74a yes virbr0-nic
[superman@docker ~]$
[superman@docker ~]$ ifconfig -a
br-1aa209e7f1ec: flags=4099 mtu 1500
inet 172.16.1.1 netmask 255.255.255.0 broadcast 172.16.1.255
ether 02:42:0f:ae:1f:4d txqueuelen 0 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
docker0: flags=4099 mtu 1500
inet 172.17.0.1 netmask 255.255.0.0 broadcast 172.17.255.255
ether 02:42:66:22:47:4e txqueuelen 0 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
ens33: flags=4163 mtu 1500
inet 192.168.0.121 netmask 255.255.255.0 broadcast 192.168.0.255
inet6 fe80::bf89:d5fb:2136:8e25 prefixlen 64 scopeid 0x20
ether 00:0c:29:ae:f5:f2 txqueuelen 1000 (Ethernet)
RX packets 1338 bytes 252973 (247.0 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 560 bytes 74996 (73.2 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73 mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10
loop txqueuelen 1000 (Local Loopback)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
virbr0: flags=4099 mtu 1500
inet 192.168.122.1 netmask 255.255.255.0 broadcast 192.168.122.255
ether 52:54:00:2b:e7:4a txqueuelen 1000 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
virbr0-nic: flags=4098 mtu 1500
ether 52:54:00:2b:e7:4a txqueuelen 1000 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
[superman@docker ~]$
PS:因为公众号平台更改了推送规则,如果不想错过内容,记得读完点一下“在看”,加个“星标”,这样每次新文章推送才会第一时间出现在你的订阅列表里。点“在看”支持我吧!
? 点赞,你的认可是我创作的动力!
⭐️ 收藏,你的青睐是我努力的方向!
✏️ 评论,你的意见是我进步的财富!
