声明:本文乃“运维家”原创,转载请注明出处,更多内容请关注公众号“运维家”。

主旨
环境
linux环境docker环境
回忆
bridge:容器和宿主机的docker0网卡桥接host:容器和宿主机共享网络null:独立,不能进行网络交互contain:容器网络共享,和host的差异在于所有的docker容器,共同拥有一个IP地址
bridge模式
语法:docker run -d -p 宿主机端口:容器端口 -p 宿主机端口:容器端口 镜像名解释:如果是多个端口映射,多个几个 -p 即可,下面我们只映射了一个端口宿主机和容器端口可以不对应,即容器80端口,宿主机可以是10000端口实例:[yunweijia@localhost ~]$ sudo docker imagesREPOSITORY TAG IMAGE ID CREATED SIZEyunweijia jenkins 976d65da21b9 44 hours ago 874MByunweijia python3 31255eafafc3 47 hours ago 662MBnginx latest c316d5a335a5 2 weeks ago 142MBcentos 7 eeb6ee3f44bd 5 months ago 204MB[yunweijia@localhost ~]$ sudo docker run -d -p 80:80 nginxed75d4ce62f1f5b3668f430726a6e4c1f630683ef12e2805019543bb96f33ce6[yunweijia@localhost ~]$ sudo docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMESed75d4ce62f1 nginx "/docker-entrypoint.…" 10 minutes ago Up 10 minutes 0.0.0.0:80->80/tcp, :::80->80/tcp quizzical_shannon[yunweijia@localhost ~]$[yunweijia@localhost ~]$ sudo netstat -tunlp | grep 80tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 105966/docker-proxytcp6 0 0 :::80 :::* LISTEN 105970/docker-proxyudp 0 0 0.0.0.0:44380 0.0.0.0:* 706/avahi-daemon: r[yunweijia@localhost ~]$
开通防火墙策略:
[yunweijia@localhost ~]$ sudo firewall-cmd --add-port=80/tcp --permanentsuccess[yunweijia@localhost ~]$ sudo firewall-cmd --reloadsuccess[yunweijia@localhost ~]$ sudo firewall-cmd --list-port80/tcp[yunweijia@localhost ~]$
浏览器访问验证:
http://宿主机IP:80

host模式
语法:docker run -d --net=host 镜像实例:[yunweijia@localhost ~]$ sudo docker run -d --net=host nginxa515ca68b5db8f181ba746d074562971a1121222d13848e9f24382fb5664ac43[yunweijia@localhost ~]$ sudo docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMESa515ca68b5db nginx "/docker-entrypoint.…" 6 seconds ago Up 6 seconds serene_hopper[yunweijia@localhost ~]$ sudo netstat -tunlp | grep 80tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 106519/nginx: mastetcp6 0 0 :::80 :::* LISTEN 106519/nginx: masteudp 0 0 0.0.0.0:44380 0.0.0.0:* 706/avahi-daemon: r[yunweijia@localhost ~]$
http://宿主机IP:80

null模式
语法:docker run -d --net=none nginx实例:[yunweijia@localhost ~]$ sudo docker run -d --net=none nginx5f73c16b7cdbf3e32d755b6cc1f4a28875ea734c6f916d03422b19f8d67429bf[yunweijia@localhost ~]$[yunweijia@localhost ~]$ sudo docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES5f73c16b7cdb nginx "/docker-entrypoint.…" 5 seconds ago Up 4 seconds boring_cohen[yunweijia@localhost ~]$
http://宿主机IP:80

[yunweijia@localhost ~]$ sudo docker run -it --net=none centos:7 bin/bash[root@5b4d026a5a2c ]# ping 192.168.112.130connect: Network is unreachable[root@5b4d026a5a2c ]# ping 127.0.0.1PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data.64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.045 ms64 bytes from 127.0.0.1: icmp_seq=2 ttl=64 time=0.050 ms^C--- 127.0.0.1 ping statistics ---2 packets transmitted, 2 received, 0% packet loss, time 1000msrtt min/avg/max/mdev = 0.045/0.047/0.050/0.007 ms[root@5b4d026a5a2c ]# ping www.baidu.comping: www.baidu.com: Name or service not known[root@5b4d026a5a2c ]# exitexit[yunweijia@localhost ~]$
从上面可以看到只能通信本身的回环地址。
contain模式
[yunweijia@localhost ~]$ sudo docker run -d centos:7 bin/bash -c "while true;do echo yunweijia; sleep 5; done"8dac7ae5ce12e7aefca6c0640bf3a0504193ba2760324bae06d161e004452ebb[yunweijia@localhost ~]$ sudo docker exec -it 8dac7a /bin/bash[root@8dac7ae5ce12 ]# yum -y install net-tool[root@8dac7ae5ce12 ]# ifconfigeth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500inet 172.17.0.2 netmask 255.255.0.0 broadcast 172.17.255.255ether 02:42:ac:11:00:02 txqueuelen 0 (Ethernet)RX packets 13047 bytes 21842754 (20.8 MiB)RX errors 0 dropped 0 overruns 0 frame 0TX packets 8534 bytes 464490 (453.6 KiB)TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536inet 127.0.0.1 netmask 255.0.0.0loop txqueuelen 1000 (Local Loopback)RX packets 0 bytes 0 (0.0 B)RX errors 0 dropped 0 overruns 0 frame 0TX packets 0 bytes 0 (0.0 B)TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0[root@8dac7ae5ce12 /]#
语法:docker run -d --net=container:有独立IP地址的容器ID或者名字 镜像名实例:[yunweijia@localhost ~]$ sudo docker run -d --net=container:8dac7 nginx1078238592dcc63307271595ecdddf1b19281b802a57b28edd61b072bb1854c0[yunweijia@localhost ~]$ sudo docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES1078238592dc nginx "/docker-entrypoint.…" 13 seconds ago Up 12 seconds affectionate_merkle8dac7ae5ce12 centos:7 "/bin/bash -c 'while…" 11 minutes ago Up 11 minutes sweet_keller[yunweijia@localhost ~]$
[yunweijia@localhost ~]$ curl http://172.17.0.2<!DOCTYPE html><html><head><title>Welcome to nginx!</title><style>html { color-scheme: light dark; }body { width: 35em; margin: 0 auto;font-family: Tahoma, Verdana, Arial, sans-serif; }</style></head><body><h1>Welcome to nginx!</h1><p>If you see this page, the nginx web server is successfully installed andworking. Further configuration is required.</p><p>For online documentation and support please refer to<a href="http://nginx.org/">nginx.org</a>.<br/>Commercial support is available at<a href="http://nginx.com/">nginx.com</a>.</p><p><em>Thank you for using nginx.</em></p></body></html>[yunweijia@localhost ~]$
文章转载自运维家,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




