docker网络模式

本文介绍了Docker的四种网络模式:bridge(使用Linuxbridge,vethpair和iptables进行SNAT),host(提供直接的主机网络性能但减少隔离性),none(禁用网络,仅保留环回接口)和container(共享其他容器网络)。每种模式有其特定的使用场景和优缺点,如bridge模式适用于容器间通信和有限的外部访问,而host模式则提供更好的性能但牺牲了网络隔离。
摘要由CSDN通过智能技术生成

docker网络模式

4种网络模式分别为bridge,host,none,container。常用的是host模式和bridge模式。

  1. docker的bridge网络模式

bridge网络模式会为每个容器分配IP地址。

#可以看到在host上看到的两个桥接到docker网桥的网卡和容器内部看到的网卡并不是一个,因为mac地址不同。
#在host上看到的网卡和容器内部的网卡其实叫做veth pair

docker inspect centos-test  |grep -i macaddress
ip addr show vethbb7ec02


#veth pair其实是一对虚拟网卡,这一对虚拟网卡就像"网线"一样。
#物理机创建一个类似网关的地址,创建容器时物理机会新开一个网卡,虚拟容器开一个网卡,然后像物理网线一样连接起来,网关也会分配具体的IP给容器。

#按道理说,这是一个私有地址,应该不能通过物理机的防火墙访问internet,这里做了伪装(SNAT)
iptables -L -t nat -n
Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination         
MASQUERADE  all  --  172.17.0.0/16        0.0.0.0/0           
POSTROUTING_direct  all  --  0.0.0.0/0            0.0.0.0/0           
POSTROUTING_ZONES_SOURCE  all  --  0.0.0.0/0            0.0.0.0/0           
POSTROUTING_ZONES  all  --  0.0.0.0/0            0.0.0.0/0

# 查看docker网络
docker network ls
#连接到bridge的容器都在bridge的网桥中被记录了
docker network inspect bridge

#总结:Docker的bridge网络模式的底层采用的是Linux bridge,veth pair,iptables

2.Docker的Host网络模式

#采用host网络模式的Docker容器,可以直接使用宿主机的IP地址与外界通信,若是宿主机的eth0是一个公有IP,那么容器也会共享这个公有IP,同时容器服务的端口也可以使用宿主机的端口,无需进行SNAT的转换。

#使用--network指定容器运行时的网络模式
docker run -dt --name centos1 --network host centos
docker exec -it centos1 ip a show


docker inspect centos1 |grep -A20 Networks 
docker network inspect host
docker network list
#带来的好处就是性能好,带来的劣势就是容器的网络缺少了隔离性,增加了风险,并且由于所有容器和宿主机共享同一个网络,网络资源也受到了限制。

3. Docker的none网络模式

因为如果使用了none作为Docker容器的网络模式,那么就意味着容器会禁用网络功能,只会留一个环回接口。

#
docker run -dt --name centos2 --network none centos

docker exec -it centos2 ip a show
docker network inspect none

#none模式的好处就是Docker容器几乎不参与网络的配置,那么如果你想针对这个容器配置网络,就需要第三方的driver。none模式的优点就是让你容器的网络设置更加的开放,不再局限于Docker自带的网络模式。

4.Docker的container网络模式

container类型的网络表明指定一个容器,和那个容器共享一个网络

docker run -dt --network container:centos1 --name centos3 centos


#与共享容器的区别
"NetworkMode": "container:93964dfe493c3a0212d1a78c2735d96c348ad1e4f6419de3909a75f0902660de",
"NetworkMode": "none",
"Networks": {}
"Networks": {"none": {...}}

5.Docker自定义网络和网络连接

建立的自定义网络就是桥接模式,和桥接模式的特点一致,可以上网,也是做了SNAT

docker network create fs-network
ip a show
docker run -dt --name fs-centos1 --network fs-network centos
docker run -dt --name fs-centos2 --network fs-network centos
docker inspect fs-centos1 |grep -i network
docker inspect fs-centos2 |grep -i network

docker network disconnect fs-network fs-centos1
docker network disconnect fs-network fs-centos2

docker network rm fs-network

6.Docker容器间网络通信

第一个要保证容器间的通信,第二要保证外部能够访问到我们的容器承载的业务。

docker run -dt --name fs-centos1 centos
docker run -dt --name fs-centos2 centos
docker exec -it fs-centos1 ip a
docker exec -it fs-centos2 ip a
docker exec -it fs-centos2 ping -c1  172.19.0.2

7.Docker容器被外部访问

Docker容器被外部访问一般基于两种网络模式,第一种是bridge,第二种是Host。
如果是bridge模式则需要通过DNAT的方法让我们的Docker容器被访问到
如果是Host模式,则我们的Docker容器可以直接被访问到

#本机端口访问
docker run -dt --name gzy-web1 nginx
docker inspect fs-web
ping 172.17.0.2
curl 172.17.0.2
#上面的情况默认外部是访问不到nginx容器的,因为nginx容器所获得的地址是docker网桥内部的地址。

#内网访问
#docker自动做了SNAT的端口映射,可实现内网访问
docker run -dt --name fs-web2 -p 8080:80 nginx
curl 10.8.0.218:8080
#使用host的网络模式也可实现内网访问
docker run -dt --name fs-web3 --network host nginx
curl 10.8.0.218:80
## 注意,这里内网需要关闭防火墙,或者允许此端口的暴露
systemctl stop httpd
ss -tunlp
curl 10.8.0.218:80
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Docker网络Docker容器之间以及容器和主机之间的通信方式。Docker支持四种网络模式:桥接模式、主机模式、容器模式和无网络模式。 1. 桥接模式 桥接模式Docker默认的网络模式,这种模式下,Docker容器通过桥接接口连接到主机上的Docker0网桥。容器之间可以通过IP地址相互通信,同时也可以通过主机的IP地址和端口号与外部进行通信。在此模式下,每个容器都会分配一个唯一的IP地址。 启动Docker容器时可通过--net参数指定网络模式为桥接模式: ``` docker run --net=bridge --name container_name image_name ``` 2. 主机模式 主机模式下,Docker容器与主机共享同一个网络命名空间,容器可以直接使用主机的IP地址和端口号进行通信。这种模式下,主机与容器之间没有任何网络隔离,因此容器的网络性能更好。 启动Docker容器时可通过--net参数指定网络模式为主机模式: ``` docker run --net=host --name container_name image_name ``` 3. 容器模式 容器模式下,Docker容器可以共享一个网络命名空间,这意味着容器之间可以直接使用容器之间的IP地址和端口号进行通信。这种模式下,每个容器都会分配一个唯一的IP地址。 启动Docker容器时可通过--net参数指定网络模式为容器模式: ``` docker run --net=container:container_name --name container_name2 image_name ``` 4. 无网络模式网络模式下,Docker容器没有网络接口,无法通过网络进行通信。这种模式主要用于需要隔离容器的应用场景,例如测试环境、安全环境等。 启动Docker容器时可通过--net参数指定网络模式为无网络模式: ``` docker run --net=none --name container_name image_name ``` 以上是Docker网络模式的介绍,使用方法如下: 1. 创建一个Docker网络 ``` docker network create network_name ``` 2. 查看已创建的Docker网络 ``` docker network ls ``` 3. 向Docker网络中添加容器 ``` docker run --net=network_name --name container_name image_name ``` 4. 删除Docker网络 ``` docker network rm network_name ``` 5. 查看Docker容器的IP地址 ``` docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' container_name ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值