1. 程式人生 > 其它 >容器自動化(二):docker基礎(下)

容器自動化(二):docker基礎(下)

五,網路管理

Docker支援5種網路模式

bridge
預設網路,Docker啟動後預設建立一個docker0網橋,預設建立的容器也是新增到這個網橋中
host
容器不會獲得一個獨立的network namespace,而是與宿主機共用一個
none
獲取獨立的network namespace,但不為容器進行任何網路配置
container
與指定的容器使用同一個network namespace,網絡卡配置也都是相同的
自定義
自定義網橋,預設與bridge網路一樣

5.1.1 bridge網路型別

 #安裝bridge管理工具
[root@docker ~]# yum -y install bridge-utils
    #檢視網橋狀態
    [root@docker ~]# brctl show
    bridge name             bridge id        STP enabled         interfaces
    br-b02d86520223     8000.02427fd4e96d       no              veth3c0da5f     #網橋br-br0綁定了兩個虛擬網絡卡
                                                                vethcd34854
    docker0             8000.02424cab4d14       no              veth0d15221     #網橋docker0綁定了一個虛擬網絡卡
    #檢視網路型別
    [root@docker ~]# docker network ls
    NETWORK ID          NAME                DRIVER              SCOPE
    29e8c90dbd80        bridge              bridge              local   #兩個網橋型別的網路
    f11e598312bd        host                host                local
    b02d86520223        lnmp                bridge              local   #兩個網橋型別的網路
    3978eff69b11        none                null                local
    #檢視容器程序
    [root@docker ~]# docker ps 
    CONTAINER ID        IMAGE                     COMMAND                  CREATED             STATUS              PORTS                                   NAMES
    274cd088c4ad        centos                    "/bin/bash"              14 minutes ago      Up 14 minutes                                               test
    1ab26792a73c        richarvey/nginx-php-fpm   "docker-php-entrypoi…"   2 days ago          Up 2 days           443/tcp, 9000/tcp, 0.0.0.0:88->80/tcp   lnmp_web
    07bd252ec637        mysql:5.6                 "docker-entrypoint.s…"   2 days ago          Up 2 days           0.0.0.0:3306->3306/tcp                  lnmp_mysql
    #檢視容器lnmp_mysql的網路資訊
    [root@docker ~]# docker inspect lnmp_mysql | grep -A 15 "Networks"
                "Networks": {
                    "lnmp": {   #網路型別lnmp
                        "IPAMConfig": null,
                        "Links": null,
                        "Aliases": [
                            "07bd252ec637"
                        ],
                        "NetworkID": "b02d8652022382f21780ee4935f472689883b64389ae120174268de57ec03e4e",
                        "EndpointID": "6059606168f72d1561e4ce1d345fdc8dafed7b3956f9b2a392f29635c4001b7c",
                        "Gateway": "172.18.0.1",    #閘道器172.18.0.1,這就是網橋br-b02d86520223
                        "IPAddress": "172.18.0.2",  #容器IP172.18.0.2
                        "IPPrefixLen": 16,
                        "IPv6Gateway": "",
                        "GlobalIPv6Address": "",
                        "GlobalIPv6PrefixLen": 0,
                        "MacAddress": "02:42:ac:12:00:02",
    #檢視容器lnmp_web的網路資訊
    [root@docker ~]# docker inspect lnmp_web | grep -A 15 "Networks"
                "Networks": {
                    "lnmp": {   #網路型別lnmp
                        "IPAMConfig": null,
                        "Links": null,
                        "Aliases": [
                            "1ab26792a73c"
                        ],
                        "NetworkID": "b02d8652022382f21780ee4935f472689883b64389ae120174268de57ec03e4e",
                        "EndpointID": "778d44313652bce9af6f09c3f67d56946eca2c6b7cf7dc8b9c79046e7874842a",
                        "Gateway": "172.18.0.1",    #閘道器172.18.0.1,這就是網橋br-b02d86520223
                        "IPAddress": "172.18.0.3",  #容器IP172.18.0.3
                        "IPPrefixLen": 16,
                        "IPv6Gateway": "",
                        "GlobalIPv6Address": "",
                        "GlobalIPv6PrefixLen": 0,
                        "MacAddress": "02:42:ac:12:00:03",
    #檢視容器test的網路資訊
    [root@docker ~]# docker inspect test | grep -A 15 "Networks"
                "Networks": {
                    "bridge": {
                        "IPAMConfig": null,
                        "Links": null,
                        "Aliases": null,
                        "NetworkID": "29e8c90dbd80c38e964c4a6055456fb1718f499f03a1ff81af0a3c2643231de5",
                        "EndpointID": "cacf4aea37a8d12bae2358fa682da1e3c3b6bb85947a88d8242fbf1bff3d3d86",
                        "Gateway": "172.17.0.1",    #閘道器172.17.0.1,這就是網橋docker0
                        "IPAddress": "172.17.0.2",  #容器IP172.17.0.2
                        "IPPrefixLen": 16,
                        "IPv6Gateway": "",
                        "GlobalIPv6Address": "",
                        "GlobalIPv6PrefixLen": 0,
                        "MacAddress": "02:42:ac:11:00:02",
                        "DriverOpts": null
                    }
5.1.2 host網路型別
-
    #啟動一個網路型別為host的容器
    [root@docker ~]# docker run -dit --name test2 --network host centos:latest /bin/bash
    156dbada7627542fd0ab7134cec270466bcef5180feeec44343821d71cc6ebaf
    [root@docker ~]# docker ps -a
    CONTAINER ID        IMAGE                     COMMAND                  CREATED             STATUS              PORTS                                   NAMES
    156dbada7627        centos:latest             "/bin/bash"              3 seconds ago       Up 3 seconds                                                test2
    274cd088c4ad        centos                    "/bin/bash"              2 hours ago         Up 2 hours                                                  test
    1ab26792a73c        richarvey/nginx-php-fpm   "docker-php-entrypoi…"   3 days ago          Up 3 days           443/tcp, 9000/tcp, 0.0.0.0:88->80/tcp   lnmp_web
    07bd252ec637        mysql:5.6                 "docker-entrypoint.s…"   3 days ago          Up 3 days           0.0.0.0:3306->3306/tcp                  lnmp_mysql
    #檢視容器的ip
    [root@docker ~]# docker exec test2 hostname -I  #這就是網路型別為host的容器,ip地址和docker宿主機完全一樣
    192.168.200.142 172.17.0.1 172.18.0.1 
    [root@docker ~]# docker exec test hostname -I   #網橋型別容器
    172.17.0.2 
    [root@docker ~]# docker exec lnmp_mysql hostname -i #網橋型別容器
    172.18.0.2
    [root@docker ~]# docker exec lnmp_web hostname -i   #網橋型別容器
    172.18.0.3
5.1.3 none網路型別(用於建立與宿主機的橋接模式)
    #啟動一個網路型別為none的容器
    [root@docker ~]# docker run -dit --name test3 --net none centos:latest
    cddf4c8888d71df9224b6455ae426fe33470e219c5c755252875da7a20c4527f
    #檢視容器IP地址
    [root@docker ~]# docker exec test3 hostname -I
    查詢後發現,什麼IP地址都沒有,是的,none型別就是暫時不給容器指定網絡卡。
5.1.4 container網路型別
-
    #啟動一個容器,網路型別container,使用test容器的網絡卡
    [root@docker ~]# docker run -dit --name test4 --net container:test centos:latest /bin/bash
    d0100ebdadde9733d5c2d0fd8f1a8017d1c74c4323408cd11ac593c0f7d7f42f
    [root@docker ~]# docker inspect test | grep -A 15 "Networks"
    \            "Networks": {
                    "bridge": {
                        "IPAMConfig": null,
                        "Links": null,
                        "Aliases": null,
                        "NetworkID": "29e8c90dbd80c38e964c4a6055456fb1718f499f03a1ff81af0a3c2643231de5",
                        "EndpointID": "cacf4aea37a8d12bae2358fa682da1e3c3b6bb85947a88d8242fbf1bff3d3d86",
                        "Gateway": "172.17.0.1",    #test容器的閘道器
                        "IPAddress": "172.17.0.2",  #test容器模式網橋
                        "IPPrefixLen": 16,
                        "IPv6Gateway": "",
                        "GlobalIPv6Address": "",
                        "GlobalIPv6PrefixLen": 0,
                        "MacAddress": "02:42:ac:11:00:02",
                        "DriverOpts": null
                    }
    [root@docker ~]# docker inspect test4 | grep -A 15 "Networks"
                "Networks": {}              #test4容器並沒有自己的網路設定
            }
        }
    ]
    [root@docker ~]# docker exec test4 hostname -I  #test4沒有網路設定卻有IP地址和test容器完全一樣
    172.17.0.2