Docker 網絡工作原理
當Docker server也就是docker daemon啟動時,會自動創建一個名字是docker0的bridge,每當docker創建一個Container時,會在主機上面創建一個名字是veth*的ethernet 端口,并把這個eth*加入到docker0的bridge,在container中會自動創建一個名字是eth0的ethernet端口,這個eth0和veth*會形成一個類似管道的對,一一對應。
配置DNS
docker是如何分配每個container的hostname和DNS配置的,可以通過在contain中mount命令看出一些東西:
mount.../dev/disk/by-uuid/5f3d0920-98a8-434a-9c02-8163dccf6c62 on /etc/resolv.conf type ext4 (rw,relatime,errors=remount-ro,data=ordered)/dev/disk/by-uuid/5f3d0920-98a8-434a-9c02-8163dccf6c62 on /etc/hostname type ext4 (rw,relatime,errors=remount-ro,data=ordered)/dev/disk/by-uuid/5f3d0920-98a8-434a-9c02-8163dccf6c62 on /etc/hosts type ext4 (rw,relatime,errors=remount-ro,data=ordered)...
docker run的-h 可以配置container的hostname,可以通過-h HOSTNAME或者--hostname=HOSTNAME來配置,docker會把HOSTNAME寫入/etc/hostname
例如:
xiaogang@Ubuntu:~/shadowsocks$ sudo docker run -t -i --hostname ubuu --rm ubuntu:14.04 /bin/bash
root@ubuu:/# cat /etc/hostname
ubuu
--link=CONNTAINER_NAMEorID:ALIAS,通過這個選項會在/etc/hosts中添加一個ALIAS,指向CONTAINER_NAMEorID, 無需知道具體的IP地址,可以直接使用ALIAS代替。
例如:
--dns=IP_ADDRESS, 會在/etc/resolv.conf的server標簽中添加一個IP_ADDRESS
--dns-search=DOMAIN,會在/etc/resolv.conf的search標簽中添加一個DOMAIN,如果一個example.com添加到search標簽中,當container需要查找一個host的IP時,host.example.com同時也會被查找。
container中的/etc/resolv.conf是從主機中的/etc/resolv.conf拷貝而來,只不過是把主機本地的nameserver過濾掉,如果過濾之后沒有任何的nameserver,docker會把google公共nameserver,8.8.8.8和8.8.4.4加入namerserver中。當主機的resolv.conf修改之后會通知container修改
container之間的通信和container和外部之間的通信
1.需要設置ip_forward系統參數,必須設置為1
$ sysctl net.ipv4.conf.all.forwardingnet.ipv4.conf.all.forwarding = 0$ sysctl net.ipv4.conf.all.forwarding=1$ sysctl net.ipv4.conf.all.forwardingnet.ipv4.conf.all.forwarding = 1
2.需要設置iptables,允許它們之間的通信
感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!
新聞熱點
疑難解答
圖片精選