1. 程式人生 > >Docker RemoteAPI 與 網絡管理

Docker RemoteAPI 與 網絡管理

它的 。。 upd 交互 基礎 網絡連接 restart ive 創建

檢查API是否一致

使用sudo docker version查看

技術分享圖片

技術分享圖片

修改服務器端配置

修改Docker守護進程啟動選項

-H  tcp://host:port
    unix:///path/to/socket, 
    fd://* or fd://socketfd

守護進程默認配置:

-H unix:///var/run/docker.sock

Ubuntu(192.168.56.102)服務器端/etc/default/docker

DOCKER_OPTS=" --label name=server -H tcp://0.0.0.0:2375 "

全0代表綁定自身的端口,通常是2375,修改完成要重啟服務

sudo service docker restart
ps -ef | grep # 查看配置是否生效

客戶端訪問

CentOS 客戶端訪問curl http://192.168.56.102:2375/info

技術分享圖片

從返回的json中可以看到"Labels":["name=server"]

接著在客戶端使用docker訪問服務器的守護進程

# whoami at localhost.localdomain in [~]
$ docker -H tcp://192.168.56.102:2375 info
Containers: 1
 Running: 0
 Paused: 0
 Stopped: 1
Images: 1
Server Version: 17.12.0-ce
。。。。。。
Labels:
 name=server
Experimental: false
Insecure Registries:
 127.0.0.0/8
Live Restore Enabled: false

WARNING: No swap limit support

可以看到同樣有著name=server的字樣

客戶端環境變量簡化操作

聲明一個環境變量:

export DOCKER_HOST="tcp://192.168.56.102:2375"

以後只要環境變量中存在著非空DOCKER_HOST變量時,運行的docker命令都會去訪問運程的守護進程,在不需要與遠程進行連接時,只需要將DOCKER_HOST置空即可

export DOCKER_HOST=""

服務端守護進程接收多訪問

服務端在接受客戶端訪問時,自身可能不能使用docker命令,需要進一步設置自身接受多訪問

DOCKER_OPTS=" --label name=server -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock"

Docker容器的網絡基礎

使用ifconfig查看網絡狀態時,會發現多一個網絡docker0,而docker守護進程正是通過該網絡實現網絡連接如下:

# whoami at localhost.localdomain in [~]
$ ifconfig
docker0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        inet x.x.x.x  netmask 255.255.0.0  broadcast x.x.x.x
        ether x:x:x:x:x:x  txqueuelen 0  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        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

當然要在啟動服務之後才能看到網絡docker0

docker0虛擬網橋

技術分享圖片

通常網橋是一個純數據鏈路層的概念,然而在Linux中虛擬網卻不是這樣的,它的特點如下:

Linux虛擬網橋的特點:

  • 可以設置IP地址
  • 相當於擁有一個隱藏的虛擬網卡

這樣Linux虛擬網橋就跨越到了第三層了。Linux虛擬網橋是通用網絡設備抽象的一種,通過IP可以查找得到它,本身就成為一張網卡(虛擬的)。

dockerO的地址劃分

  • IP: 172.17.x.x
  • 子網掩碼:255.255.0.0
  • MAC: 02:42:ac:ll:00:00 到 02:42:ac:ll:ff:ff 總共提供了65534個地址

在一個容器啟動時,docker0需要創建網絡的兩端如下:

技術分享圖片

一端是在容器的網絡設備,一端則是在運行容器的宿主機器上。這個過程驗證如下:

可以Ubuntu中安裝bridge-utils以進行網橋管理

# whoami at iamwho in [~]
$ brctl 
Usage: brctl [commands]
commands:
    addbr       <bridge>        add bridge
    delbr       <bridge>        delete bridge
    addif       <bridge> <device>   add interface to bridge
    delif       <bridge> <device>   delete interface from bridge
    hairpin     <bridge> <port> {on|off}    turn hairpin on/off
    setageing   <bridge> <time>     set ageing time
    setbridgeprio   <bridge> <prio>     set bridge priority
    setfd       <bridge> <time>     set bridge forward delay
    sethello    <bridge> <time>     set hello time
    setmaxage   <bridge> <time>     set max message age
    setpathcost <bridge> <port> <cost>  set path cost
    setportprio <bridge> <port> <prio>  set port priority
    show        [ <bridge> ]        show a list of bridges
    showmacs    <bridge>        show a list of mac addrs
    showstp     <bridge>        show bridge stp info
    stp         <bridge> {on|off}   turn stp on/off

使用brctl show查看docker0如下:

# whoami at iamwho in [~]
$ sudo brctl show          
bridge name     bridge id           STP     enabled     interfaces
docker0         8000.0242485afc84   no

運行一個容器:

docker run -it --name=nwt0 ubuntu /bin/bash

再使用ifconfig(如果查找不到命令,執行apt-get update,安裝net-tools)查看網絡:

root@164c3f8e3438:/# ifconfig
eth0      Link encap:Ethernet  HWaddr 02:42:ac:11:00:02  
          inet addr:172.17.0.2  Bcast:172.17.255.255  Mask:255.255.0.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:3889 errors:0 dropped:0 overruns:0 frame:0
          TX packets:2911 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:25143014 (25.1 MB)  TX bytes:162373 (162.3 KB)

退出交互式到守護式,使用brctl show會看到在interfaces中多了一個vethxxxx的網絡接口

# whoami at iamwho in [~]
$ sudo brctl show
bridge name     bridge id           STP     enabled     interfaces
docker0         8000.0242485afc84   no                  vethc7ff419

自定義docker0

  • 修改dockerO地址:

    示例如下:

    $ sudo ifconfig dockerO 192.168.200.1 netmask 255.255.255.0

技術分享圖片

這樣的修改似乎只能在臨時創建的新容器中生效,重啟服務失生效
  • 更改docker守護進程的啟動配置:

    /etc/default/docker 中添加DOCKER_OPS-b = brO

    其中br0為自定義的虛擬網橋,添加虛擬網橋的方式如下:

    sudo brctl addbr br0

    同樣使用ifconfig為新增網橋添加IP

    然後修改配置文件/etc/default/docker添加添加DOCKER_OPS-b = brO

    重啟服務以生效

Docker容器的互聯

允許所有容器互聯

拒絕容器間互聯

允許特定容器間的連接

Docker RemoteAPI 與 網絡管理