微信小程式的生命週期函式
網路基礎
埠對映
docker run -d -P --name test1 nginx
docker中容器預設是無法溝通的,只有當容器的web服務應用程式埠對映到本機宿主機的埠
#docker port 檢視埠對映情況 [root@server01 ~]# docker ps -a #檢視容器 CONTAINER ID IMAGE COMMAND CREATED STATUS 74b9933c9c5a nginx "/docker-entrypoint.…" 18 seconds ago Up 16 seconds [root@server01 ~]# docker port test1 #檢視埠 80/tcp -> 0.0.0.0:32768 #對映到宿主機隨機埠
docker的-p指定埠8000
docker run -d -p 8000:80 --name test2 nginx
0.0.0.0:111(本機的所有ip都可以訪問)
192.168.200.10:111(只有此ip地址和端口才能訪問)
127.0.0.1:111(本區域可以訪問)
指定傳輸協議
docker run -d -p 8000:80/tcp --name test3 nginx
#還規定了協議
埠暴露
expose命令:可以指定一定方位內額度埠
容器互聯
一個容器可以同時加入多個網路中,使用不同的地址可以訪問不同網路中的容器
- 將兩個容器處於統一網路當中
#建立兩個名字映象busybox [root@localhost ~]# docker run -itd --name=container1 busybox 1d9b72bf8016ef7a20b1750e32b7fff5cdf79651df8d73496a6fa885a6b515b2 [root@localhost ~]# docker run -itd --name=container2 busybox 429128533cfea0e58c0ee69add173e86a85d786620d5a3c325d82ccdaa012a65 #建立一個獨立的容器網路,使用bridge驅動 [root@localhost ~]# docker network create -d bridge --subnet 172.25.0.0/16 demo_net 4f44d43938df86510c70d0593c4ab5b59a67cf5df09d5b6893a04dbe87d2e8bd #docker network create 建立一個網路 #-d bridge 型別 #--subnet 172.25.0.0/16 定義這個網段 #這個網路名叫 demo_net [root@localhost ~]# docker network ls NETWORK ID NAME DRIVER SCOPE 6df808d90fb7 bridge bridge local 4f44d43938df demo_net bridge local ff177a4017b7 host host local 8c0975d854fe none null local #將container2加入到dome_net這個網路中 [root@localhost ~]# docker network connect demo_net container2 [root@localhost ~]# docker network inspect demo_net #檢視這個網路裡的模組 "Containers": { "429128533cfea0e58c0ee69add173e86a85d786620d5a3c325d82ccdaa012a65": { "Name": "container2", "EndpointID": "caddb2d673156b8e74ca8754b4b9e332213bb7a837f5c5c2a6276b25aa80d59c", "MacAddress": "02:42:ac:19:00:02", #此容器本來隨機地址 "IPv4Address": "172.25.0.2/16", #現在是此地址在範圍內 "IPv6Address": "" } }, #建立一個容器並加入到demo_net網路給他3的IP地址 [root@localhost ~]# docker run --network=demo_net --ip=172.25.3.3 -itd --name=container3 busybox [root@localhost ~]# docker network inspect demo_net "Containers": { "23e87e8993b455df9181405ecda0092bc324d09172d03afa99891abe126c79db": { "Name": "container3", "EndpointID": "9c98ef849927a365b7263c3cf9a374a302d9d9f57384dcabf241896aa8304086", "MacAddress": "02:42:ac:19:03:03", "IPv4Address": "172.25.3.3/16", #又分走一個3的ip地址 "IPv6Address": "" }, "429128533cfea0e58c0ee69add173e86a85d786620d5a3c325d82ccdaa012a65": { "Name": "container2", "EndpointID": "caddb2d673156b8e74ca8754b4b9e332213bb7a837f5c5c2a6276b25aa80d59c", "MacAddress": "02:42:ac:19:00:02", "IPv4Address": "172.25.0.2/16", "IPv6Address": "" #2此時擁有兩個網路,bridge,demo_net #1只有一個網路,bridge #3只有一個網路,demo_net #此時2和3同一網路中,1和2也在同一網路中,所以2和1,3都是可以互聯的,1和3是不能互聯的。
檢驗網際網路絡
[root@localhost ~]# docker exec -it container1 ifconfig eth0 Link encap:Ethernet HWaddr 02:42:AC:11:00:03 #172.17這個網路 inet addr:172.17.0.3 Bcast:172.17.255.255 Mask:255.255.0.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:8 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:656 (656.0 B) TX bytes:0 (0.0 B) 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:1000 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B) [root@localhost ~]# docker exec -it container2 ifconfig eth0 Link encap:Ethernet HWaddr 02:42:AC:11:00:04 #172.17這個網路 inet addr:172.17.0.4 Bcast:172.17.255.255 Mask:255.255.0.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:8 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:656 (656.0 B) TX bytes:0 (0.0 B) eth1 Link encap:Ethernet HWaddr 02:42:AC:19:00:02 #172.25這個網路 inet addr:172.25.0.2 Bcast:172.25.255.255 Mask:255.255.0.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:21 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:2424 (2.3 KiB) TX bytes:0 (0.0 B) 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:1000 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B) [root@localhost ~]# docker exec -it container3 ifconfig eth0 Link encap:Ethernet HWaddr 02:42:AC:19:03:03 #只有一個172.25這個網路 inet addr:172.25.3.3 Bcast:172.25.255.255 Mask:255.255.0.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:8 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:656 (656.0 B) TX bytes:0 (0.0 B) 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:1000 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
- link引數:會在源和接收器之間建立一個隧道。
#建立一個容器並設定名字 [root@localhost ~]# docker run -itd --name test busybox [root@localhost ~]# docker run -itd --name=link --link test:test busybox test:test == 名字:別名 [root@localhost ~]# docker exec -it link ping test #試ping
網路模式
docker 自動建立3個網路
demo_net:是自建的網路
使用docker run 建立容器時,可以使用--net指定加入的網路
常用的4個網路模式
-
host模式:--net=host指定
Network namespace:隔離網路,提供了一份獨立的網路環境,包括網絡卡,路由,lptables規則等,都會與其他的network namespace隔離,使用Host模式後,將不會獲得一個獨立的network namespace,而是與宿主機使用同一個network namespace,不會特別安全,但是容器的其他方面,還是和宿主機隔離的。 -
Container模式:--net=container:name_or_ID指定
可以指定一個新建立的容器和已存在的容器共享一個network namespace,此時所有的網路配置都是一樣的,但其他還是隔離的。兩個容器的程序可以通過lo網絡卡裝置通訊。--net=container:container_id(已存在的容器)/container_name(新建立的容器) [root@localhost ~]# docker run -itd --name=con1 busybox #已存在的容器 11be5847a56d71792c548750d11a32276096e7017fb2eb6372eccbbe42ec9a53 [root@localhost ~]# docker exec -it con1 ifconfig #檢視網路資訊 eth0 Link encap:Ethernet HWaddr 02:42:AC:11:00:07 inet addr:172.17.0.7 Bcast:172.17.255.255 Mask:255.255.0.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:8 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:656 (656.0 B) TX bytes:0 (0.0 B) 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:1000 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B) [root@localhost ~]# docker run -itd --net=container:con1 --name=con2 busybox #建立新的容器並指定模式與con1使用同一網路 44beb2676dec17aad14afe835e0ebaf54afad8fddb694c21b8d1f943a882f531 [root@localhost ~]# docker exec -it con2 ifconfig #檢視網路資訊 eth0 Link encap:Ethernet HWaddr 02:42:AC:11:00:07 inet addr:172.17.0.7 Bcast:172.17.255.255 Mask:255.255.0.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:8 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:656 (656.0 B) TX bytes:0 (0.0 B) 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:1000 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B) #發現一模一樣的網路資訊
-
None模式:--net=none指定
就是啥也沒有,需要自己配置 -
Bridge模式:--net=bridge指定,預設設定
是docker預設的網路模式(其實是不需要指定的),屬於一種NAT網路模式,docker daemon在啟動時會建立一個docker0的網橋(-b引數可以指定)每一個容器使用bridge模式時,都會為容器建立一對虛擬的網路介面(veth pair)裝置,這對介面一端在容器的network namespace,另一端在docker0,這樣實現容器與宿主機之間的通訊。
bridge模式下,docker容器與外部網路通訊都是通過IPtable規則控制的,也就是docker網路效能底下得到一個原因,使用iptables -vnL -t nat 可以檢視nat表。