Docker容器网络地址 docker容器网络配置文件( 四 )
2.3 container模式配置
启动第一个容器web1
[rootlocalhost ~]# docker run -it --rm --name web1 busybox/ # ip a1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft forever4: eth0if5: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueuelink/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ffinet 172.17.0.2/16 brd 172.17.255.255 scope global eth0valid_lft forever preferred_lft forever
启动第二个容器web2
[rootlocalhost ~]# docker run -it --rm --name web2 busybox/ # ip a1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft forever6: eth0if7: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueuelink/ether 02:42:ac:11:00:03 brd ff:ff:ff:ff:ff:ffinet 172.17.0.3/16 brd 172.17.255.255 scope global eth0valid_lft forever preferred_lft forever
可以看到名为web2的容器IP地址是172.17.0.3 , 与第一个容器的IP地址不是一样的 , 也就是说并没有共享网络 , 此时如果我们将第二个容器的启动方式改变一下 , 就可以使名为web2的容器IP与web1容器IP一致 , 也即共享IP , 但不共享文件系统 。
[rootlocalhost ~]# docker run -it --rm --name web2 --network container:web1 busybox/ # ip a1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft forever4: eth0if5: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueuelink/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ffinet 172.17.0.2/16 brd 172.17.255.255 scope global eth0valid_lft forever preferred_lft forever
此时我们在web1容器上创建一个目录
/ # mkdir /tmp/data/ # ls /tmp/data
到web2容器上检查/tmp目录会发现并没有这个目录 , 因为文件系统是处于隔离状态 , 仅仅是共享了网络而已 。
在web2容器上部署一个站点
【Docker容器网络地址 docker容器网络配置文件】/ # echo 'hello word' > /tmp/index.html/ # ls /tmp/index.html/ # httpd -h /tmp/ # netstat -anltActive Internet connections (servers and established)Proto Recv-Q Send-Q Local AddressForeign AddressStatetcp00 :::80:::*LISTEN
在web1容器上用本地地址去访问此站点
/ # wget -O - -q 127.0.0.1:80hello word
由此可见 , container模式下的容器间关系就相当于一台主机上的两个不同进程
2.4 host模式配置
启动容器时直接指明模式为host
[rootlocalhost ~]# docker run -it --rm --network host busybox/ # ip a1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet6 ::1/128 scope hostvalid_lft forever preferred_lft forever2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel qlen 1000link/ether 00:0c:29:bb:22:82 brd ff:ff:ff:ff:ff:ffinet 192.168.111.135/24 brd 192.168.111.255 scope global dynamic noprefixroute ens160valid_lft 1121sec preferred_lft 1121secinet6 fe80::3d5c:b9d6:55f:48e9/64 scope link noprefixroutevalid_lft forever preferred_lft forever3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueuelink/ether 02:42:54:0c:19:02 brd ff:ff:ff:ff:ff:ffinet 172.17.0.1/16 brd 172.17.255.255 scope global docker0valid_lft forever preferred_lft foreverinet6 fe80::42:54ff:fe0c:1902/64 scope linkvalid_lft forever preferred_lft forever
此时如果我们在这个容器中启动一个http站点 , 我们就可以直接用宿主机的IP直接在浏览器中访问这个容器中的站点了 。
/ # echo 'hello word' > /tmp/index.html/ # httpd -h /tmp/ # netstat -anltActive Internet connections (servers and established)Proto Recv-Q Send-Q Local AddressForeign AddressStatetcp00 0.0.0.0:220.0.0.0:*LISTENtcp00 192.168.111.135:22192.168.111.1:1052ESTABLISHED tcp00 :::80:::*LISTENtcp00 :::22:::*LISTEN[rootlocalhost ~]# ss -anltStateRecv-QSend-QLocal Address:PortPeer Address:PortProcessLISTEN01280.0.0.0:220.0.0.0:*LISTEN09*:80*:*LISTEN0128[::]:22[::]:*[rootlocalhost ~]# curl 192.168.111.135hello word
扩展:
问:此时还能在创建一个容器再部署一个http站点吗?
[rootlocalhost ~]# docker run -it --rm --network host busybox/ # echo 'hello word' > /tmp/index.html/ # httpd -h /tmphttpd: bind: Address already in use
从上得知是是不能的 , 因为端口会冲突 。
3、容器的常用操作
3.1 容器的主机名
[rootlocalhost ~]# docker run -it --rm busybox/ # hostnamea7898c7df6f9# 主机名默认为容器的ID[rootlocalhost ~]# docker psCONTAINER IDIMAGECOMMANDCREATEDSTATUSPORTSNAMESa7898c7df6f9busybox"sh"About a minute agoUp About a minutepriceless_swartz# 无法修改主机名 , 因为是只读状态/ # hostname zslhostname: sethostname: Operation not permitted
推荐阅读
- 什么是网络电视机 电视机工作原理
- 八个症状证明你被辐射
- 网络用语快乐星球什么意思 看完这篇文章你知道了吗
- 手机远程家用无线摄像机,超长待机,该如何选择网络
- 网络无internet访问权限怎么办? 无internet访问权限
- 策划书范文案例 网络营销方案范文
- 网络推广与网络营销一样吗 网络营销推广的误区有哪些案例
- 如何组建一个网络营销团队?企业如何进行网络营销团队建设
- 平安文明祭祀弘扬社会新风?清明网络文明祭扫活动
- 容器云和虚拟云?云主机和容器的区别
