006.Docker网络管理
2019-01-15 02:25:22来源:博客园 阅读 ()
一 docker网络模式
1.1 四种模式
- host模式
- container模式
- none模式
- bridge模式
1 root@docker:~# docker network ls #默认已经创建好三种模式,且无法删除 2 NETWORK ID NAME DRIVER SCOPE 3 4237839afd99 bridge bridge local 4 c7a14aafc3b5 host host local 5 3cc2eba3eb5f none null local
1.2 host模式
- host模式下的容器没有隔离的 network namespace;
- 容器的 IP 地址同 Docker host 的 IP 地址;
- 需要注意容器中服务的端口号不能与 Docker host 上已经使用的端口号相冲突;
- host 模式能够和其它模式共存。
1 root@docker:~# docker run -d --name docker_host1 --network host training/webapp python app.py 2 root@docker:~# docker exec -it docker_host1 /bin/bash 3 root@docker:/opt/webapp# ifconfig -a
1.3 container模式
1 root@docker:~# docker run -dit --name docker_host2 centos7-xhy /bin/bash 2 root@docker:~# docker run -dit --name docker_host3 --network container:docker_host2 centos7-xhy /bin/bash 3 root@docker:~# docker exec -it docker_host2 /bin/bash 4 [root@c9b51e88f75a /]# ifconfig -a
1 root@docker:~# docker exec -it docker_host3 /bin/bash 2 [root@c9b51e88f75a /]# ifconfig -a
1.4 none模式
1 root@docker:~# docker run -dit --name docker_host4 --network none centos7-xhy /bin/bash 2 root@docker:~# docker exec -it docker_host4 /bin/bash
1.5 bridge模式
二 bridge模式
2.1 bridge模式简介
1 root@docker:~# iptables -t nat -vnL
2.2 bridge模式特点
- 使用一个 linux bridge,默认为 docker0;
- 使用 veth 对,一端在容器的网络 namespace 中,另一端在 docker0 上;
- 该模式下Docker Container不具有一个公有IP,因为宿主机的IP地址与veth pair的 IP地址不在同一个网段内;
- Docker采用 NAT 方式,将容器内部的服务监听的端口与宿主机的某一个端口port 进行“绑定”,使得宿主机以外的网络可以主动将网络报文发送至容器内部;
- 外界访问容器内的服务时,需要访问宿主机的 IP 以及宿主机的端口 port;
- NAT 模式基于三层网络上的实现方式,故肯定会影响网络的传输效率;
- 容器拥有独立、隔离的网络栈,以便于使得容器和宿主机以外的网络通过NAT建立通信;
1 root@docker:~# docker run -dit --name docker_host5 -p 5005:80 training/webapp python app.py 2 root@docker:~# docker exec -it docker_host5 /bin/bash 3 root@951e6cd51cd0:/opt/webapp# ifconfig -a
1 root@docker:~# iptables -t nat -vnL #查看端口映射
1 root@docker:~# iptables-save 2 …… 3 -A POSTROUTING -s 172.17.0.3/32 -d 172.17.0.3/32 -p tcp -m tcp --dport 80 -j MASQUERADE 4 …… 5 -A DOCKER ! -i docker0 -p tcp -m tcp --dport 5005 -j DNAT --to-destination 172.17.0.3:80
三 docker容器的DNS和主机名
3.1 DNS和主机名配置文件
1 root@docker:~# docker run -dit --name docker_host6 centos7-xhy /bin/bash 2 root@docker:~# docker exec -it docker_host6 /bin/bash 3 [root@12ac200c6a4c /]# mount 4 ... 5 /dev/sda4 on /etc/resolv.conf type ext4 (rw,relatime,data=ordered) 6 /dev/sda4 on /etc/hostname type ext4 (rw,relatime,data=ordered) 7 /dev/sda4 on /etc/hosts type ext4 (rw,relatime,data=ordered) 8 ...
3.2 修改dns和主机名
- -h HOSTNAME 或 --hostname=HOSTNAME:设置容器的主机名,此名称会写入/etc/hostname和/etc/hosts文件中,也会在容器的bash提示符看到。但是在外部,容器的主机名是无法查看的,不会出现在其他容器的hosts文件中,即使使用docker ps命令也无法查看。此参数是docker run命令的参数,而非docker daemon的启动参数。
- --dns=IP_ADDRESS...:为容器配置DNS,写入/etc/resolv.conf中。该参数可以在docker daemon 启动的时候设置,也可以在docker run时设置,默认为8.8.8.8或8.8.4.4。
四 多节点docker网络
- 直接路由方式;
- 桥接方式(如pipework);
- Overlay隧道方式(如flannel、ovs+gre)等。
- 一类是基于 VxLAN ,对跨节点网络的原生支持;
- 另一种是通过插件(plugin)方式引入的第三方实现方案,比如 Flannel,Calico 等等。
4.1 直接路由方式
4.2 桥接-pipework方式
1 root@docker01:~# apt-get install bridge-utils #两台docker宿主机都建议安装此工具 2 root@docker02:~# apt-get install bridge-utils #两台docker宿主机都建议安装此工具 3 root@docker01:~# docker run -dit --name container01 --net=none centos:7 /bin/bash 4 root@docker01:~# docker run -dit --name container02 --net=none centos:7 /bin/bash 5 root@docker02:~# docker run -dit --name container03 --net=none centos:7 /bin/bash 6 root@docker02:~# docker run -dit --name container04 --net=none centos:7 /bin/bash 7 8 root@docker01:~# git clone https://github.com/jpetazzo/pipework 9 root@docker02:~# git clone https://github.com/jpetazzo/pipework 10 root@docker01:~# cp pipework/pipework /usr/local/bin/ 11 root@docker02:~# cp pipework/pipework /usr/local/bin/ 12 root@docker01:~# chmod u+x /usr/local/bin/pipework 13 root@docker01:~# brctl show #查看当前默认的桥接网卡
1 root@docker01:~# pipework br0 container01 172.24.8.201/24@172.24.8.2 2 root@docker01:~# pipework br0 container02 172.24.8.202/24@172.24.8.2 3 root@docker02:~# pipework br0 container03 172.24.8.203/24@172.24.8.2 4 root@docker02:~# pipework br0 container04 172.24.8.204/24@172.24.8.2
1 root@docker01:~# brctl show
1 root@docker02:~# brctl show
- 查看主机是否包含br0(可以自定义)网桥,如果不存在就创建;
- 向容器实例添加一块网卡(可以设置网卡名),并配置相应的固定IP;
- 若容器实例已经有默认的路由,则删除掉,将@后面的IP设置为默认路由的网关;
- 将容器实例连接到创建的br0网桥上。
1 root@docker01:~# docker network create --driver bridge --subnet 172.24.8.0/24 --gateway 172.24.8.2 br1 2 root@docker:~# docker network inspect br1
1 root@docker01:~# ip addr add 172.24.8.90/24 dev br0;\ 2 ip addr del 172.24.8.90/24 dev eth0;\ 3 brctl addif br0 eth0;\ 4 ip route del default;\ 5 ip route add default via 172.24.8.2 dev br0 6 root@docker02:~# ip addr add 172.24.8.91/24 dev br0 ;\ 7 ip addr del 172.24.8.91/24 dev eth0;\ 8 brctl addif br0 eth0;\ 9 ip route del default;\ 10 ip route add default via 172.24.8.2 dev br0
1 root@docker01:~# ping 172.24.8.201
4.3 基于etcd Docker原生overlay网络
4.4 基于Flannel的overlay网络
原文链接:https://www.cnblogs.com/itzgr/p/10179003.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- 运行 docker .... 命令报错 2020-06-10
- 容器技术之Docker私有镜像仓库harbor 2020-06-08
- 容器技术之Docker私有镜像仓库docker-distribution 2020-06-07
- 容器技术之Dockerfile(二) 2020-06-04
- 容器云技术 2020-06-02
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash