1. 程式人生 > 資訊 >分析師指出:新 MacBook Pro 搭載自家晶片,蘋果利潤率更高了

分析師指出:新 MacBook Pro 搭載自家晶片,蘋果利潤率更高了

網路基礎

埠對映
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表。