极客时间运维进阶训练营第一周作业----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