极客时间运维进阶训练营第一周作业----docker的brideg网络模式和container网络模式

docker安装完成以后,默认会在宿主机创建一个docker0网卡,IP地址是172.17.0.1/16,并且会生成三个不同类型的网络。

root@docker1:/home/z9999# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 00:0c:29:11:c3:53 brd ff:ff:ff:ff:ff:ff
    altname enp2s1
    inet 192.168.153.128/24 brd 192.168.153.255 scope global dynamic ens33
       valid_lft 1318sec preferred_lft 1318sec
    inet6 fe80::20c:29ff:fe11:c353/64 scope link
       valid_lft forever preferred_lft forever
3: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
    link/ether 02:42:7e:2a:e5:2c brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
       valid_lft forever preferred_lft forever
    inet6 fe80::42:7eff:fe2a:e52c/64 scope link
       valid_lft forever preferred_lft forever

root@docker1:/home/z9999# docker network ls
NETWORK ID NAME DRIVER SCOPE
31e4a601988c bridge bridge local                      \\桥接网络,默认模式,容器基于SNAT进行地址转换访问宿主机以外的环境
f3df4f9bab19 host host local                          \\host网络,直接使用宿主机的网络(不创建net namespace),性能最好,但是容器端口不能冲突
54ee7571639d none null local                          \\空网络,容器不会分配有偶小的IP地址(只有一个回环网卡用于内部通信),用于离线出局处理等场景

 

root@docker1:/home/z9999# docker run -it -d -p 8080:80 --net=bridge nginx:latest        \\这里的--net=bridge可加可不加,因为默认就是bridge
d073f016c209f837fc133367deb3b00deb93e25c98c20c1a9a3cf14ddd5a0f73
root@docker1:/home/z9999# docker run -it -d -p 8081:80 --net=bridge nginx:latest
e4a6b04a3d80d98ab88c77b60caa932b4e3eef44cd2d9c1d7a05d960d20341e9

root@docker1:/home/z9999# ss -tln
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
LISTEN 0 4096 0.0.0.0:8081 0.0.0.0:*
LISTEN 0 4096 127.0.0.53%lo:53 0.0.0.0:*
LISTEN 0 128 0.0.0.0:22 0.0.0.0:*
LISTEN 0 4096 0.0.0.0:8080 0.0.0.0:*
LISTEN 0 4096 [::]:8081 [::]:*
LISTEN 0 128 [::]:22 [::]:*
LISTEN 0 4096 [::]:8080 [::]:*

container网络模式

使用参数--net=container:DOCKERNAME/ID指定,使用此模式创建的容器需要指定一个已存在的容器共享一个网络namespace,而不会创建独立的namespace,创建的容器也不会配置自己的IP,而是和被指定的目标容器共享对方的IP和端口范围,因此这个容器的端口不能和目标容器冲突,除网络之外,进程树、文件系统、用户等资源依然是隔离的,两个容器的进程可以通过lo网卡及容器IP进行通信。

root@docker1:/home/z9999# docker run -it -d -p 8081:80 --net=bridge nginx:latest
3df2d01d692d5fc974cb9eb5b240d4ee2dcf542a5903946303bf8c6adda7842a
root@docker1:/home/z9999# ls /var/run/docker/netns/    \\新建一个人容器并查看netns目录,有一个新建的容器的net namespace
729c29cd8382  default

root@docker1:/home/z9999# docker run -it -d\                \\新建一个容器,网络模式为container,指定与刚才创建的容器共用net namespace
--name db \
-e MARIADB_USER=wp \
-e MARIADB_PASSWORD=wp \
-e MARIADB_ROOT_PASSWORD=root \
--net=container:3df2d01d692d5f mariadb:latest
94dd2e83e58265f9c67b295f170192ca22f970d24d67dd2a0cf1cd2d0e2ba13e

 

root@docker1:/home/z9999# ls /var/run/docker/netns/                            \\再次查看netns目录,没有新增
729c29cd8382 default

 

posted @ 2022-10-21 15:30  皮卡丘卡皮卡丘  阅读(55)  评论(0编辑  收藏  举报