成人怡红院-成人怡红院视频在线观看-成人影视大全-成人影院203nnxyz-美女毛片在线看-美女免费黄

站長(zhǎng)資訊網(wǎng)
最全最豐富的資訊網(wǎng)站

一定搞得懂Docker容器間網(wǎng)絡(luò)互聯(lián)原理

本篇文章給大家?guī)?lái)了關(guān)于docker容器間網(wǎng)絡(luò)互聯(lián)原理的相關(guān)知識(shí),希望對(duì)大家有幫助。

一定搞得懂Docker容器間網(wǎng)絡(luò)互聯(lián)原理

一、今天我們要搞明白的實(shí)驗(yàn)

一定搞得懂Docker容器間網(wǎng)絡(luò)互聯(lián)原理

如上紅字所描述:同一個(gè)宿主機(jī)上的不同容器之間的網(wǎng)絡(luò)如何互通的???

二、前置網(wǎng)絡(luò)知識(shí)

2.1、docker默認(rèn)為我們創(chuàng)建的網(wǎng)絡(luò)

我們安裝完docker之后,docker daemon會(huì)為我們自動(dòng)創(chuàng)建3個(gè)網(wǎng)絡(luò),如下:

Copy~]# docker network ls NETWORK ID     NAME                DRIVER    SCOPE e71575e3722a   bridge              bridge    local ab8e3d45575c   host                host      local 0c9b7c1134ff   none                null      local

其實(shí)docker有4種網(wǎng)絡(luò)通信模型,分別是:bridge、host、none、container

默認(rèn)的使用的網(wǎng)絡(luò)模型是bridge,也是我們生產(chǎn)上會(huì)使用到的網(wǎng)絡(luò)模型。

下文中跟大家分享docker容器互通原理到時(shí)候呢,用到的也是bridge網(wǎng)絡(luò)模型


2.2、怎么理解docker0網(wǎng)橋

另外,當(dāng)我們安裝完docker之后,docker會(huì)為我們創(chuàng)建一個(gè)叫docker0的網(wǎng)絡(luò)設(shè)備

通過(guò)ifconfig命令可以查看到它,看起來(lái)它貌似和eth0網(wǎng)絡(luò)地位相當(dāng),像是一張網(wǎng)卡。然而并不是,docker0其實(shí)是一個(gè)Linux網(wǎng)橋

Copy[root@vip ~]# ip addr 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: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000     link/ether 00:0c:29:b4:97:ee brd ff:ff:ff:ff:ff:ff     inet 10.4.7.99/24 brd 10.4.7.255 scope global noprefixroute eth0        valid_lft forever preferred_lft forever     inet6 fe80::20c:29ff:feb4:97ee/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:db:fe:ff:db 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:dbff:fefe:ffdb/64 scope link        valid_lft forever preferred_lft forever

何以見得?可以通過(guò)下面的命令查看操作系統(tǒng)上的網(wǎng)橋信息

Copy ~]# yum install bridge-utils  ~]# brctl show bridge name bridge id       STP enabled interfaces docker0     8000.0242f0a8c0be   no      veth86e2ef2                                                                     vethf0a8bcb

那大家怎么理解Linux網(wǎng)橋的概念呢?

其實(shí)大家可以把docker0理解成一臺(tái)虛擬的交換機(jī)!然后像下面這樣類比著理解,就會(huì)豁然開朗

一定搞得懂Docker容器間網(wǎng)絡(luò)互聯(lián)原理

1、它好比是大學(xué)在機(jī)房上課時(shí),老師旁邊的那個(gè)大大的交換機(jī)設(shè)備。

2、把機(jī)房里的電腦都連接在交換機(jī)上,類比成docker 容器作為一臺(tái)設(shè)備都連接著宿主機(jī)上的docker0。

3、把交換機(jī)和機(jī)房中的機(jī)器的ip在同一個(gè)網(wǎng)段,類比成docker0、和你啟動(dòng)的docker容器的ip也同屬于172網(wǎng)段。

Copy# docker0 ip是:  ~]# ifconfig 3: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default     link/ether 02:42:db:fe:ff:db 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:dbff:fefe:ffdb/64 scope link        valid_lft forever preferred_lft forever  # 進(jìn)入容器中查看ip是: /# ifconfig eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500         inet 172.17.0.2  netmask 255.255.0.0  broadcast 172.17.255.255         ether 02:42:ac:11:00:02  txqueuelen 0  (Ethernet)         RX packets 13  bytes 1102 (1.0 KiB)         RX errors 0  dropped 0  overruns 0  frame 0         TX packets 0  bytes 0 (0.0 B)         TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

類比成這樣:

一定搞得懂Docker容器間網(wǎng)絡(luò)互聯(lián)原理


2.3、什么是veth-pair技術(shù)?

我們剛才做類比理解docker0的時(shí)候說(shuō):把機(jī)房里的電腦都連接在交換機(jī)上,類比成docker 容器作為一臺(tái)設(shè)備都連接著宿主機(jī)上的docker0。那具體的實(shí)現(xiàn)落地實(shí)現(xiàn)用的是啥技術(shù)呢?

答案是:veth pair

veth pair的全稱是:virtual ethernet,就是虛擬的以太網(wǎng)卡。

說(shuō)到以太網(wǎng)卡大家都不陌生呀,不就是我們常見的那種叫eth0或者是ens的網(wǎng)絡(luò)設(shè)備嗎?

那這個(gè)veth pair是怎么玩的呢?有啥用呢?大家可以看下面這張圖

一定搞得懂Docker容器間網(wǎng)絡(luò)互聯(lián)原理一定搞得懂Docker容器間網(wǎng)絡(luò)互聯(lián)原理

veth-pair設(shè)備總是會(huì)成對(duì)的出現(xiàn),用于連接兩個(gè)不同network-namespace.

就上圖來(lái)說(shuō),從network-namespace1的veth0中發(fā)送的數(shù)據(jù)會(huì)出現(xiàn)在 network-namespace2的veth1設(shè)備中。

雖然這種特性很好,但是如果出現(xiàn)有多個(gè)容器,你就會(huì)發(fā)現(xiàn)組織架構(gòu)會(huì)越來(lái)越復(fù)雜,越來(lái)越亂

一定搞得懂Docker容器間網(wǎng)絡(luò)互聯(lián)原理

不過(guò)好在我們已經(jīng)循序漸進(jìn)的了解Linux網(wǎng)橋(docker0),以及這里的veth-pair設(shè)備,于是我們可以把整體的架構(gòu)圖重新繪制成下面這樣

一定搞得懂Docker容器間網(wǎng)絡(luò)互聯(lián)原理

因?yàn)椴煌萜饔凶约焊綦x后的network-namespace所以他們都有自己的網(wǎng)絡(luò)協(xié)議棧

那我們能不能找到容器里面的網(wǎng)卡和物理機(jī)上的哪張卡是一對(duì)網(wǎng)絡(luò)vethpair設(shè)備呢?

如下:

Copy# 進(jìn)入容器 ~]# docker exec -ti 545ed62d3abf /bin/bash  /# apt-get install ethtool /# ethtool -S eth0 NIC statistics:      peer_ifindex: 55

回到宿主機(jī)

Copy~]# ip addr     ... 55: vethf0a8bcb@if54: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP group default     link/ether ae:eb:5c:2f:7d:c3 brd ff:ff:ff:ff:ff:ff link-netnsid 10     inet6 fe80::aceb:5cff:fe2f:7dc3/64 scope link        valid_lft forever preferred_lft forever

意思是就是說(shuō),容器545ed62d3abf的eth0網(wǎng)卡和宿主機(jī)通過(guò)ip addr命令查看的網(wǎng)絡(luò)設(shè)備標(biāo)號(hào)55的設(shè)備組成一對(duì)vethpair設(shè)備,彼此流量互通!

三、同一個(gè)局域網(wǎng)中不同主機(jī)的互聯(lián)原理

先看個(gè)簡(jiǎn)單的,同一個(gè)局域網(wǎng)中的不同主機(jī)A、B之間是如何互聯(lián)交換數(shù)據(jù)的。如下圖

一定搞得懂Docker容器間網(wǎng)絡(luò)互聯(lián)原理

那,既然是同一個(gè)局域網(wǎng)中,說(shuō)明A、B的ip地址在同一個(gè)網(wǎng)段,如上圖就假設(shè)它們都在192.168.1.0網(wǎng)段。

還得再看下面這張OSI 7層網(wǎng)絡(luò)模型圖。

主機(jī)A向主機(jī)B發(fā)送數(shù)據(jù),對(duì)主機(jī)A來(lái)說(shuō)數(shù)據(jù)會(huì)從最上層的應(yīng)用層一路往下層傳遞。比如應(yīng)用層使用的http協(xié)議、傳輸層使用的TCP協(xié)議,那數(shù)據(jù)在往下層傳遞的過(guò)程中,會(huì)根據(jù)該層的協(xié)議添加上不同的協(xié)議頭等信息。

一定搞得懂Docker容器間網(wǎng)絡(luò)互聯(lián)原理

根據(jù)OSI7層網(wǎng)絡(luò)模型的設(shè)定,對(duì)于接受數(shù)據(jù)的主機(jī)B來(lái)說(shuō),它會(huì)接收到很多數(shù)據(jù)包!這些數(shù)據(jù)包會(huì)從最下層的物理層依次往上層傳遞,依次根據(jù)每一層的網(wǎng)絡(luò)協(xié)議進(jìn)行拆包。一直到應(yīng)用層取出主機(jī)A發(fā)送給他的數(shù)據(jù)。

那么問(wèn)題來(lái)了,主機(jī)B怎么判斷它收到的數(shù)據(jù)包是否是發(fā)送給自己的呢?萬(wàn)一有人發(fā)錯(cuò)了呢?

答案是:根據(jù)MAC地址,邏輯如下。

Copyif 收到的數(shù)據(jù)包.MAC地址 == 自己的MAC地址{   // 接收數(shù)據(jù)   // 處理數(shù)據(jù)包 }else{  // 丟棄 }

那對(duì)于主機(jī)A來(lái)說(shuō),它想發(fā)送給主機(jī)B數(shù)據(jù)包,還不能讓主機(jī)B把這個(gè)數(shù)據(jù)包扔掉,它只能中規(guī)中矩的按以太網(wǎng)網(wǎng)絡(luò)協(xié)議要求封裝將要發(fā)送出去的數(shù)據(jù)包,往下傳遞到數(shù)據(jù)鏈路層(這一層傳輸?shù)臄?shù)據(jù)要求,必須要有目標(biāo)mac地址,因?yàn)閿?shù)據(jù)鏈路層是基于mac地址做數(shù)據(jù)傳輸?shù)模?/p>

那數(shù)據(jù)包中都需要哪些字段呢?如下:

Copysrc ip = 192.168.1.2  //源ip地址,交換機(jī) dst ip = 192.168.1.3  //目標(biāo)ip地址 //本機(jī)的mac地址(保證從主機(jī)B回來(lái)的包正常送達(dá)主機(jī)A,且主機(jī)A能正常處理它) src mac = 主機(jī)A的mac地址 dst mac = 主機(jī)B的mac地址//目標(biāo)mac地址

其中的dst ip好說(shuō),我們可以直接固定寫,或者通過(guò)DNS解析域名得到目標(biāo)ip。

那dst mac怎么獲取呢?

這就不得不說(shuō)ARP協(xié)議了! ARP其實(shí)是一種地址解析協(xié)議,它的作用就是:以目標(biāo)ip為線索,找到目的ip所在機(jī)器的mac地址。也就是幫我們找到dst mac地址!大概的過(guò)程如下幾個(gè)step

一定搞得懂Docker容器間網(wǎng)絡(luò)互聯(lián)原理

推薦閱讀:白日夢(mèng)的DNS筆記

簡(jiǎn)述這個(gè)過(guò)程:主機(jī)A想給主機(jī)B發(fā)包,那需要知道主機(jī)B的mac地址。

  1. 主機(jī)A查詢本地的arp 高速緩存中是否已經(jīng)存在dst ip和dst mac地址的映射關(guān)系了,如果已存在,那就直接用。
  2. 本地arp高速緩存中不存在dst ip和dst mac地址的映射關(guān)系的話那就只能廣播arp請(qǐng)求包,同一網(wǎng)段的所有機(jī)器都能收到arp請(qǐng)求包。
  3. 收到arp請(qǐng)求包的機(jī)器會(huì)對(duì)比arp包中的src ip是否是自己的ip,如果不是則直接丟棄該arp包。如果是的話就將自己的mac地址寫到arp響應(yīng)包中。并且它會(huì)把請(qǐng)求包中src ip和src mac的映射關(guān)系存儲(chǔ)在自己的本地。

補(bǔ)充:

交換機(jī)本身也有學(xué)習(xí)能力,他會(huì)記錄mac地址和交換機(jī)端口的映射關(guān)系。比如:mac=a,端口為1。

那當(dāng)它接收到數(shù)據(jù)包,并發(fā)現(xiàn)mac=a時(shí),它會(huì)直接將數(shù)據(jù)扔向端口1。

嗯,在arp協(xié)議的幫助下,主機(jī)A順利拿到了主機(jī)B的mac地址。于是數(shù)據(jù)包從網(wǎng)絡(luò)層流轉(zhuǎn)到數(shù)據(jù)鏈路層時(shí)已經(jīng)被封裝成了下面的樣子:

Copysrc ip = 192.168.1.2 src mac = 主機(jī)A的mac地址 dst ip = 192.168.1.3 dst mac = 主機(jī)B的mac地址

網(wǎng)絡(luò)層基于ip地址做數(shù)據(jù)做轉(zhuǎn)發(fā)

數(shù)據(jù)鏈路基于mac地址做數(shù)據(jù)轉(zhuǎn)發(fā)

根據(jù)OIS7層網(wǎng)絡(luò)模型,我們都知道數(shù)據(jù)包經(jīng)過(guò)物理層發(fā)送到機(jī)器B,機(jī)器B接收到數(shù)據(jù)包后,再將數(shù)據(jù)包向上流轉(zhuǎn),拆包。流轉(zhuǎn)到主機(jī)B的數(shù)據(jù)鏈路層。

那主機(jī)B是如何判斷這個(gè)在數(shù)據(jù)鏈路層的包是否是發(fā)給自己的呢?

答案前面說(shuō)了,根據(jù)目的mac地址判斷。

Copy// 主機(jī)B if 收到的數(shù)據(jù)包.MAC地址 == 自己的MAC地址{   if dst ip == 本機(jī)ip{     // 本地處理數(shù)據(jù)包   }else{     // 查詢路由表,根據(jù)路由表的規(guī)則,將數(shù)據(jù)包轉(zhuǎn)某個(gè)某卡、或者默認(rèn)網(wǎng)關(guān)   } }else{  // 直接丟棄 }

這個(gè)例子比較簡(jiǎn)單,dst ip就是主機(jī)B的本機(jī)ip 所以它自己會(huì)處理這個(gè)數(shù)據(jù)包。

那數(shù)據(jù)包處理完之后是需要給主機(jī)A一個(gè)響應(yīng)包,那問(wèn)題又來(lái)了,響應(yīng)包該封裝成什么樣子呢?對(duì)主機(jī)B來(lái)說(shuō)響應(yīng)包也需要src ip、src mac、dst ip、dst mac

Copysrc ip = 192.168.1.3 src mac = 主機(jī)B的mac地址 dst ip = 192.168.1.2 src mac = 主機(jī)A的mac地址 (之前通過(guò)arp記錄在自己的arp高速緩存中了,所以,這次直接用)

同樣的道理,響應(yīng)包也會(huì)按照如下的邏輯被主機(jī)A接受,處理。

Copy// 主機(jī)A if 收到的數(shù)據(jù)包.MAC地址 == 自己的MAC地址{   if dst ip == 本機(jī)ip{     // 本地處理數(shù)據(jù)包   }else{     // 查詢路由表,根據(jù)路由表的規(guī)則,將數(shù)據(jù)包轉(zhuǎn)某個(gè)某卡、或者默認(rèn)網(wǎng)關(guān)   } }else{  // 直接丟棄 }

這一次,讓我在百度告訴你,當(dāng)你請(qǐng)求www.baidu.com時(shí)都發(fā)生了什么?

四、容器網(wǎng)絡(luò)互通原理

有了上面那些知識(shí)儲(chǔ)備呢?再看我們今天要探究的問(wèn)題,就不難了。

如下紅字部分:同一個(gè)宿主機(jī)上的不同容器是如何互通的?

一定搞得懂Docker容器間網(wǎng)絡(luò)互聯(lián)原理

那我們先分別登陸容器記錄下他們的ip

Copy9001的ip是:172.17.0.2 9002的ip是:172.17.0.3

先看實(shí)驗(yàn)效果:在9001上curl9002

Copy/# curl 172.7.88.3 <!DOCTYPE html> <html> <head> <title>Welcome to nginx!</title> <style> html { color-scheme: light dark; } ...

實(shí)驗(yàn)結(jié)果是網(wǎng)絡(luò)互通!

我們?cè)偻晟埔幌律厦娴膱D,把docker0、以及兩個(gè)容器的ip補(bǔ)充上去,如下圖:

一定搞得懂Docker容器間網(wǎng)絡(luò)互聯(lián)原理

Docker容器間網(wǎng)絡(luò)互聯(lián)原理,講不明白算我輸

那兩臺(tái)機(jī)器之前要通信是要遵循OSI網(wǎng)絡(luò)模型、和以太網(wǎng)協(xié)議的。

我們管172.17.0.2叫做容器2

我們管172.17.0.3叫做容器3

比如我們現(xiàn)在是從:容器2上curl 容器3,那么容器2也必須按照以太網(wǎng)協(xié)議將數(shù)據(jù)包封裝好,如下

Copysrc ip = 172.17.0.2 src mac = 容器2的mac地址 dst ip = 172.17.0.3 dst mac = 容器3的mac地址 ???

那現(xiàn)在的問(wèn)題是容器3的mac地址是多少?

刪掉所有容器,重新啟動(dòng),方便實(shí)驗(yàn)抓包

容器2會(huì)先查自己的本地緩存,如果之前沒有訪問(wèn)過(guò),那么緩存中也沒有任何記錄!

Copy:/# arp -n

不過(guò)沒關(guān)系,還有arp機(jī)制兜底,于是容器2會(huì)發(fā)送arp請(qǐng)求包,大概如下

Copy1、這是一個(gè)arp請(qǐng)求包 2、我的ip地址是:172.17.0.2 3、我的mac地址是:容器2的mac地址 4、請(qǐng)問(wèn):ip地址為:172.17.0.3的機(jī)器,你的mac地址是多少?

容器2會(huì)查詢自己的路由表,將這個(gè)arp請(qǐng)求從自己的gateway發(fā)送出去

Copy/# route -n Kernel IP routing table Destination     Gateway         Genmask         Flags Metric Ref    Use Iface 0.0.0.0         172.7.88.1      0.0.0.0         UG    0      0        0 eth0 172.7.88.0      0.0.0.0         255.255.255.0   U     0      0        0 eth0

我們發(fā)現(xiàn)容器2的網(wǎng)關(guān)對(duì)應(yīng)的網(wǎng)絡(luò)設(shè)備的ip就是docker0的ip地址,并且經(jīng)由eth0發(fā)送出去!

哎?eth0不就是我們之前說(shuō)的veth-pair設(shè)備嗎?

并且我們通過(guò)下面的命令可以知道它的另一端對(duì)應(yīng)著宿主機(jī)上的哪個(gè)網(wǎng)絡(luò)設(shè)備:

Copy/# ethtool -S eth0 NIC statistics:      peer_ifindex: 53

而且我們可以下面的小實(shí)驗(yàn),驗(yàn)證上面的觀點(diǎn)是否正確

Copy# 在容器中ping百度 ~]# ping 220.181.38.148  # 在宿主機(jī)上抓包 ~]# yum install tcpdump -y ~]# tcpdump -i ${vethpair宿主機(jī)側(cè)的接口名} host 220.181.38.148  ...

所以說(shuō)從容器2的eth0出去的arp請(qǐng)求報(bào)文會(huì)同等的出現(xiàn)在宿主機(jī)的第53個(gè)網(wǎng)絡(luò)設(shè)備上。

通過(guò)下面的這張圖,你也知道第53個(gè)網(wǎng)絡(luò)設(shè)備其實(shí)就是下圖中的veth0-1

一定搞得懂Docker容器間網(wǎng)絡(luò)互聯(lián)原理

所以這個(gè)arp請(qǐng)求包會(huì)被發(fā)送到docker0上,由docker0拿到這個(gè)arp包發(fā)現(xiàn),目標(biāo)ip是172.17.0.3并不是自己,所以docker0會(huì)進(jìn)一步將這個(gè)arp請(qǐng)求報(bào)文廣播出去,所有在172.17.0.0網(wǎng)段的容器都能收到這個(gè)報(bào)文!其中就包含了容器3!

那容器3收到這個(gè)arp報(bào)文后,會(huì)判斷,哦!目標(biāo)ip就是自己的ip,于是它將自己的mac地址填充到arp報(bào)文中返回給docker0!

同樣的我們可以通過(guò)抓包驗(yàn)證,在宿主機(jī)上

Copy# 在172.17.0.2容器上ping172.17.0.3 /# ping 172.17.0.3  ~]# tcpdump -i vethdb0d222 tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on vethdb0d222, link-type EN10MB (Ethernet), capture size 262144 bytes  17:25:30.218640 ARP, Request who-has 172.17.0.3 tell 172.17.0.2, length 28 17:25:30.218683 ARP, Reply 172.17.0.3 is-at 02:42:ac:11:00:03 (oui Unknown), length 28 17:25:30.218686 IP 172.17.0.2.54014 > 172.17.0.3.http: Flags [S], seq 3496600258, win 29200, options [mss 1460,sackOK,TS val 4503202 ecr 0,nop,wscale 7], length 0

于是容器2就拿到了容器3的mac地址,以太網(wǎng)數(shù)據(jù)包需要的信息也就齊全了!如下:

Copysrc ip = 172.17.0.2 src mac = 容器2的mac地址 dst ip = 172.17.0.3 dst mac = 容器3的mac地址

再之后容器2就可以和容器3正常互聯(lián)了!

容器3會(huì)收到很多數(shù)據(jù)包,那它怎么知道哪些包是發(fā)給自己的,那些不是呢?可以參考如下的判斷邏輯

Copyif 響應(yīng)包.mac == 自己的mac{  // 說(shuō)明這是發(fā)給自己包,所以不能丟棄   if 響應(yīng)包.ip == 自己的ip{     // 向上轉(zhuǎn)發(fā)到osi7層網(wǎng)絡(luò)模型的上層   }else{     // 查自己的route表,找下一跳   } }else{  // 直接丟棄 }

五、實(shí)驗(yàn)環(huán)境

Copy# 下載  ~]# docker pull registry.cn-hangzhou.aliyuncs.com/changwu/nginx:1.7.9-nettools  # 先啟動(dòng)1個(gè)容器  ~]# docker run --name mynginx1 -i -t -d -p 9001:80 nginx-1.7.9-nettools:latest eb569b938c07e95ccccbfc654c1fee6364eea55b20f5394382ff42b4ccf96312  ~]# docker run --name mynginx2 -i -t -d -p 9002:80 nginx-1.7.9-nettools:latest 545ed62d3abfd63aa9c3ae196e9d7fe6f59bbd2e9ae4e6f2bd378f23587496b7  # 驗(yàn)證 ~]# curl 127.0.0.1:9001

推薦學(xué)習(xí):《docker視頻教程》

贊(0)
分享到: 更多 (0)
?
網(wǎng)站地圖   滬ICP備18035694號(hào)-2    滬公網(wǎng)安備31011702889846號(hào)
24小时日本高清在线播放| 啊灬啊别停灬用力啊公视频| 综合图区亚洲另类偷窥| 18禁高潮出水呻吟娇喘蜜芽| chi老女人老熟女HD| 成人美女黄网站18禁免费| 国产成人亚洲精品无码车A| 国产香港明星裸体XXXX视频| 久久精品国产亚洲AV麻豆王友容| 免费观看的国产大片APP下载| 琪琪网三级伦锂电影| 少女たちよ在线观看动漫4| 五月婷日韩中文字幕| 亚洲日韩激情无码一区| 2020久久天天躁狠狠躁夜夜| 超碰人人透人人爽人人看| 国产成人无码AV在线播放无广告 | 清纯JK校花被啪啪AV免费| 丝袜一区二区三区在线播放 | 国内精品久久久久精免费| 久久久久久亚洲精品中文字幕| 妺妺窝人体色WWW人体色| 日韩免费视频一一二区| 新X8X8拨牐拨牐永久免费AP| 野花日本大全免费观看版动漫 | 中文字幕亚洲精品无码| 敌伦交换第十一部分| 含羞草实验室隐藏路径2023| 免费无遮挡无码永久视频| 他的粗大把她捣出白沫| 亚洲色偷偷综合亚洲av伊人| x88AV在线观看ww| 国产小受呻吟GV视频在线观看| 老熟女奶头好大呀| 日日狠狠久久偷偷色综合96蜜桃 | 熟妇五十路六十路息与子| 亚洲欧美黑人深喉猛交群| ASIAN高潮.颤抖.抽搐BL| 国产精华液一线二线三线| 久久久久久国产精品免费无码 | 日韩人妻无码精品—专区| 亚洲爆乳精品无码一区二区三区| 91夜色精品偷窥熟女精品网站 | 啊灬啊灬啊灬快好深| 韩国办公室三级HD激情在线观看| 女上男下啪啪激烈高潮无遮盖| 无码国产偷倩在线播放老年人| 曰曰摸天天添天天湿| 国产VIVODESHD精品| 麻豆人妻少妇精品无码专区2| 天堂中文АⅤ在线| 中文日本字幕MV在现线观看 | 亚洲精品成人网线在线播放VA | 人妻人人做人妻人人添| 亚洲精品成人无码中文毛片不卡| 锕锕锕锕锕锕锕锕好疼小视频软件| 黑人高潮拔也拔不出来| 日本大学SGU大二大三| 亚洲日产中文字幕无码| 给老子叫 老子喜欢听| 迈开腿让我尝一下你的味道一| 无人区卡一卡二卡三乱码入口| AV潮喷大喷水系列无码| 精品日本一区二区三区免费 | 丰满人妻熟妇乱又伦精品APP| 久久久久久久精品免费老鸭窝| 熟睡入侵JEALOUSVUE| 18禁止免费观看试看免费大片| 国产在线内射婷婷| 日韩精品无码专区免费视频| 曰曰摸夜夜添夜夜添高潮出水| 国产精品无码A∨麻豆| 奇米精品视频一区二区三区| 亚洲午夜久久久久妓女影院| 国产精品V片在线观看不卡| 欧美性猛交XXXX黑人| 亚洲同性猛男毛片| 国产剧情AV在线| 日本伦奷在线播放| 中国无码人妻丰满熟妇啪啪软件| 国产在线视频www色| 色天使色偷偷色噜噜噜AV天堂| 撞击到最深处她抽搐喷水| 后入骚妇内射AV| 挺进绝色老师的紧窄小肉| x88AV在线观看ww| 蜜桃AV秘 无码一区二区三欧| 亚洲AV永久无码精品九之| 国产CHINESE中国HDXXXX| 强行破瓜稚嫩粗暴顶弄哭喊| 又粗又大又爽又舒服日产| 狠狠色丁香久久婷婷综| 忘忧草社区在线影视| 布丁漫画土豪漫画入口页面| 男人把大JI巴放进女人有视频 | 男人边吃奶边做呻吟免费视频| 亚洲熟妇AV一区二区三区漫画| 国产无遮挡裸体免费视频| 天堂中文最新版在线官网在线| 宝贝你下面喷潮了| 欧美成人VA免费看视频| 中文乱码35页在线观看| 精品无人区麻豆乱码1区2| 亚洲AV无码1区2区久久| 国产高清免费AV片在线观看不卡| 日韩人妻高清精品专区| YW.1CNC爆乳尤物未| 欧美成人片一区二区三区| 又大又粗欧美成人网站| 久久精品亚洲熟妇少妇任你躁 | 无码国产成人午夜在线观看| 丰满浓毛的大隂户自慰| 日韩欧美一区二区三区视频 | 西西大胆无码视频免费| 国产产无码乱码精品久久鸭| 色噜噜亚洲男人的天堂| 赤裸人妻撅起肥白大屁股| 日本WWW一道久久久免费榴莲| SM调教贱屁股眼哭叫求饶H| 男人J桶进女人P无遮挡| 18禁自慰网址进入| 欧美成天堂网地址| 99国产精品国产精品九九| 农民人伦一区二区三区| 99国产精品自在自在久久| 欧美成人精品视频一区二区三区 | 激情男女高潮射精AV免费| 亚洲成AV人无码综合在线观看| 韩国电影理伦片完整| 亚洲成AV成人片在线观看| 精品久久免费一区二区三区四区| 亚洲男人AV天堂男人社区| 久久精品99久久香蕉国产色戒| 野花高清中文免费观看视频 | 啊灬啊灬啊灬啊灬快灬高潮了| 人妻无码一区二区视频| 成人无码精品一区二区三区| 色婷婷粉嫩AV精品综合在线| 国产AV无码专区亚洲AV| 无码免费大香伊蕉在人线国产| 国产美女被遭强高潮网站免费| 亚洲AV成人网站在线播放| 精品多毛少妇人妻AV免费久久| 亚洲日本一线产区和二线| 两个黑人大战娇妻的小说| 98精产国品一二三产区区| 琪琪777午夜理论片在线观看播| 成人三级A视频在线观看| 熟女性饥渴一区二区三区| 国产又色又爽又黄的在线观看| 亚洲精品夜夜夜妓女网| 雷神ちゃんが人気の原因| AAA少妇高潮大片免费看088| 日本适合18岁以上的护肤品| 国产福利一区二区精品秒拍| 亚洲AV综合A国产AV中文| 久久久久亚洲AV无码网站少妇| 中文字幕日本乱码仑区在线| 人人做人碰人人添| 国产精品久久久久久久久软件| 亚洲成无码电影在线观看| 裸体丰满白嫩大尺度尤物| PYTHON人马大战| 无码粉嫩虎白一线天在线观看| 精产国品一二三产品在哪 | 女人来高潮水多视频| 成人亚洲色欲色一欲WWW| 小婷又软又嫩又紧水又多的软件| 久久99国产精品久久99小说| 2021少妇久久久久久久久久| 日韩精品无码熟人妻视频 | 内射猛交XXXXⅩX最新消息| 成色好的Y31S标准版| 亚洲AV无码精品色夜午夜网址| 久久香蕉国产线看观看亚洲小说| YY111111少妇影院无码老司机| 无码熟妇人妻Av又大又粗又爽| 久久国产一区二区三区| AV无码人妻一区二区三区牛牛| 牲欲强的熟妇农村老妇女视频| 黑人又大又粗又长欧美网站| 最新亚洲人成网站在线观看| 少妇乳大丰满在线播放| 精品国品一二三产品区别在线观看| 7777奇米四色眼影| 我和岳乱妇三级高清电影| 久久婷婷五月综合色D啪| 成 人 黄 色 网站 69| 亚洲H在线播放在线观看H| 欧美XXXXX高潮喷水麻豆| 国产精品人人爽人人做我的可爱| 亚洲一卡2卡3卡4卡精品分类| 日本工口里番H全彩无遮挡| 狠狠人妻熟妇av又粗又大 | 中国内射XXXX6981少妇| 四虎成人精品无码永久在线| 久久棈精品久久久久久噜噜| 高潮VPSWINDOWS国产乱| 一区二区三区精品视频日本| 特级欧美AAAAAAA免费观看|