Docker网络模型的学习(二)

本文介绍了Docker的四种网络模式:Host模式下容器直接使用宿主机的网络;None模式下容器无网络配置,极少使用;Bridge模式是默认模式,每个容器有自己的网络IP;Container模式下容器共享已存在容器的网络。此外,还提到了端口映射的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

docker网络

Host模式

Host 模式,使用参数 –net=host 指定。
启动的容器如果指定了使用host模式,那么新创建的容器不会创建自己的虚拟网卡,而是直接使用宿主机的网卡和IP地址,因此在容器里面查看到的IP信息就是宿主机的信息,访问容器的时候直接使用宿主机IP+容器端口即可,不过容器的其他资源们必须文件系统、系统进程等还是和宿主机保持隔离。
此模式的网络性能最高,但是各容器之间端口不能相同,适用于运行容器端口比较固定的业务。
为避免端口冲突,先删除所有的容器:

[root@xiaomao ~]# docker run --name tingweb2 -it --rm --network host  xiaomao/mying:v0.5 /bin/sh
/ # ifconfig
docker0   Link encap:Ethernet  HWaddr 02:42:53:F2:A2:ED
          inet addr:172.17.0.1  Bcast:172.17.255.255  Mask:255.255.0.0

ens33     Link encap:Ethernet  HWaddr 00:0C:29:57:76:BE
          inet addr:192.168.146.133  Bcast:192.168.146.255  Mask:255.255.255.0
/ # hostname
xiaomao
/ # httpd -h /data/web/html/
/ # netstat -tnl
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address State
tcp        0      0 :::80                   :::*
宿主机访问web服务

在这里插入图片描述

none模式

None模式,使用参数 –net=none 指定
在使用none 模式后,Docker 容器不会进行任何网络配置,其没有网卡、没有IP也没有路由,因此默认无法与外界通信,需要手动添加网卡配置IP等,所以极少使用,

[root@xiaomao ~]# docker run --name tinyweb2 -it --rm --network none xiaomao/mying:v0.5 /bin/sh
/ # ifconfig -a
lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
bridge模式

docker的默认模式即不指定任何模式就是bridge模式,也是使用比较多的模式,此模式创建的容器会为每一个容器分配自己的网络 IP等信息,并将容器连接到一个虚拟网桥与外界通信。

[root@xiaomao ~]# docker run --name tingweb2 -it --rm --network bridge  xiaomao/mying:v0.5 /bin/sh
/ # ifconfig
eth0      Link encap:Ethernet  HWaddr 02:42:AC:11:00:02
          inet addr:172.17.0.2  Bcast:172.17.255.255  Mask:255.255.0.0
/ # hostname
fef4b6398a4c
/ # ping 192.168.146.133
PING 192.168.146.133 (192.168.146.133): 56 data bytes
64 bytes from 192.168.146.133: seq=0 ttl=64 time=0.211 ms
64 bytes from 192.168.146.133: seq=1 ttl=64 time=0.065 ms
#查看网络模式的详细信息
[root@xiaomao ~]# docker network inspect bridge
# 批量关闭正在运行的容器
[root@xiaomao ~]# docker stop  $(docker ps -a -q)
#批量删除已退出容器
[root@xiaomao ~]# docker rm -f  `docker ps -aq -f status=exited`
Container模式

Container模式,使用参数 –net=container:名称或ID 指定。
使用此模式创建的容器需指定和一个已经存在的容器共享一个网络,而不是和宿主机共享网,新创建的容器不会创建自己的网卡也不会配置自己的IP,而是和一个已经存在的被指定的容器东西IP和端口范围,因此这个容器的端口不能和被指定的端口冲突,除了网络之外的文件系统、进程信息等仍然保持 相互隔离,两个容器的进程可以通过lo网卡社保通信。

[root@xiaomao ~]# docker run --name joinedc1 -it --rm  --network container:tingweb2 xiaomao/mying:v0.5 /bin/sh
/ # ifconfig
eth0      Link encap:Ethernet  HWaddr 02:42:AC:11:00:02
          inet addr:172.17.0.2  Bcast:172.17.255.255  Mask:255.255.0.0
/ # hostname
fef4b6398a4c          
#启容器时给容器加上主机名
[root@xiaomao ~]# docker run --name bbox2 -it --rm --hostname  bbox.xiaomao.com busybox
/ # hostname
bbox.xiaomao.com
#给容器和宿主机之间配置hosts解析
[root@xiaomao ~]# docker run --name bbox2 -it --rm --hostname bbox.xiaomao.com --add-host  xiaomao:192.168.146.140 busybox
/ # cat /etc/hosts
127.0.0.1	localhost
::1	localhost ip6-localhost ip6-loopback
fe00::0	ip6-localnet
ff00::0	ip6-mcastprefix
ff02::1	ip6-allnodes
ff02::2	ip6-allrouters
192.168.146.140	xiaomao
172.17.0.2	bbox.xiaomao.com bbox
#指定容器DNS
[root@xiaomao ~]# docker run --name bbox2 -it --rm --hostname bbox.xiaomao.com --add-host  xiaomao:192.168.146.140  --dns 192.168.140.133 --dns 114.114.114.114 --dns-search ilinux.io busybox
/ # cat /etc/hosts
127.0.0.1	localhost
::1	localhost ip6-localhost ip6-loopback
fe00::0	ip6-localnet
ff00::0	ip6-mcastprefix
ff02::1	ip6-allnodes
ff02::2	ip6-allrouters
192.168.146.140	xiaomao
172.17.0.2	bbox.xiaomao.com bbox
/ # cat /etc/resolv.conf
search ilinux.io
nameserver 192.168.140.133
nameserver 114.114.114.114
指定端口映射
[root@xiaomao ~]# docker run --name tinyweb3 -d --network bridge -p 80 xiaomao/mying:v0.5
[root@xiaomao ~]# docker ps -a
CONTAINER ID        IMAGE                COMMAND                  CREATED             STATUS              PORTS                   NAMES
01ea0095f256        xiaomao/mying:v0.5   "/bin/sh -c '/bin/ht…"   7 seconds ago       Up 5 seconds        0.0.0.0:32768->80/tcp   tinyweb3
[root@xiaomao ~]# docker kill tinyweb3
tinyweb3
[root@xiaomao ~]# docker rm tinyweb3
tinyweb3
[root@xiaomao ~]# docker run --name tinyweb3 -d --network bridge -p 80:80  xiaomao/mying:v0.5
[root@xiaomao ~]# docker ps -a
CONTAINER ID        IMAGE                COMMAND                  CREATED             STATUS              PORTS                NAMES
b141c2c0a4a3        xiaomao/mying:v0.5   "/bin/sh -c '/bin/ht…"   15 seconds ago      Up 14 seconds       0.0.0.0:80->80/tcp   tinyweb3
[root@xiaomao ~]# docker run --name tinyweb3 -d --network bridge -p 80:80  xiaomao/mying:v0.5
[root@xiaomao ~]# docker ps -a
CONTAINER ID        IMAGE                COMMAND                  CREATED             STATUS              PORTS                NAMES
b141c2c0a4a3        xiaomao/mying:v0.5   "/bin/sh -c '/bin/ht…"   15 seconds ago      Up 14 seconds       0.0.0.0:80->80/tcp   tinyweb3
[root@xiaomao ~]# docker run --name tinyweb3 -d --network bridge -p  192.168.146.133:82:80  xiaomao/mying:v0.5
[root@xiaomao ~]# docker ps -a
CONTAINER ID        IMAGE                COMMAND                  CREATED             STATUS              PORTS                        NAMES
7aec2755994a        xiaomao/mying:v0.5   "/bin/sh -c '/bin/ht…"   8 seconds ago       Up 6 seconds        192.168.146.133:82->80/tcp   tinyweb3
#一次性映射多个端口+协议
[root@xiaomao ~]# docker run --name tinyweb4 -d --network bridge -p 80 -p 443  xiaomao/mying:v0.5
[root@xiaomao ~]# docker container port tinyweb4
443/tcp -> 0.0.0.0:32769
80/tcp -> 0.0.0.0:32770
#指定docker的网段
[root@xiaomao ~]# docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
04b6cbca66b7        mybr0               bridge              local
#宿主机上查看
[root@xiaomao ~]# ip add
59: br-04b6cbca66b7: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN
    link/ether 02:42:cb:d0:79:4e brd ff:ff:ff:ff:ff:ff
    inet 10.10.0.1/24 brd 10.10.0.255 scope global br-04b6cbca66b7
       valid_lft forever preferred_lft forever
[root@xiaomao ~]# docker run --name tinyweb5 --rm --network mybr0 -p 80 -p 443 -it xiaomao/mying:v0.5 /bin/sh
/ # ifconfig
eth0      Link encap:Ethernet  HWaddr 02:42:0A:0A:00:02
          inet addr:10.10.0.2  Bcast:10.10.0.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:13 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:1086 (1.0 KiB)  TX bytes:0 (0.0 B)
#修改docker0网桥的信息
[root@xiaomao ~]# cat /etc/docker/daemon.json
{
  "registry-mirrors": ["https://wlwmxdoi.mirror.aliyuncs.com"],
   "bip": "172.31.0.1/16"
}
[root@xiaomao ~]# systemctl restart docker
[root@xiaomao ~]# ifconfig
docker0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        inet 172.31.0.1  netmask 255.255.0.0  broadcast 172.31.255.255
        inet6 fe80::42:53ff:fef2:a2ed  prefixlen 64  scopeid 0x20<link>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值