首页 > 网站 > 建站经验 > 正文

Docker 配置固定IP及桥接的实现方法

2019-11-02 16:14:51
字体:
来源:转载
供稿:网友

docker默认使用bridge模式,通过网桥连接到宿主机,而容器内部的ip则从网桥所在的ip段取未用的ip。这样做一个不方便的地方在于容器内部的ip不是固定的,想要连接容器时只能通过映射到宿主机的端口,因而有很多项目使用overlay来为docker提供网络的配置,比如Pipework、Flannel、Kubernetes、Weave、opencontrail等。

想要使用overlay来为docker配置网络,需要首先了解下docker的网络模式:

一、Docker的四种网络模式

Docker在创建容器时有四种网络模式,bridge为默认不需要用--net去指定,其他三种模式需要在创建容器时使用--net去指定。

bridge模式,使用--net=bridge指定,默认设置。 none模式,使用--net=none指定。 host模式,使用--net=host指定。 container模式,使用--net=container:容器名称或ID指定。(如:--net=container:30b668ccb630)

bridge模式:docker网络隔离基于网络命名空间<Network Namespace>,在物理机上创建docker容器时会为每一个docker容器分配网络命名空间,并且把容器IP桥接到物理机的虚拟网桥上。

none模式:此模式下创建容器是不会为容器配置任何网络参数的,如:容器网卡、IP、通信路由等,全部需要自己去配置。

host模式:此模式创建的容器没有自己独立的网络命名空间,是和物理机共享一个Network Namespace,并且共享物理机的所有端口与IP,并且这个模式认为是不安全的。

container模式:此模式和host模式很类似,只是此模式创建容器共享的是其他容器的IP和端口而不是物理机,此模式容器自身是不会配置网络和端口,创建此模式容器进去后,你会发现里边的IP是你所指定的那个容器IP并且端口也是共享的,而且其它还是互相隔离的,如进程等。

二、Docker配置自己的网桥

例子一、

1)、自定义新网桥

root@Docker:~# dpkg -l | grep bridge*    #查看是否有安装brctl命令包ii bridge-utils 1.5-6Ubuntu2  amd64    Utilities for configuring the Linux Ethernet bridgeroot@Docker:~# apt-get install bridge-utils #安装brctl命令包root@Docker:~# docker -v          #docker版本Docker version 1.5.0, build a8a31efroot@Docker:~# ps -ef | grep docker     #正在运行 root   6834  1 0 16:28 ?    00:00:00 /usr/bin/docker -droot@Docker:~# service docker stop     #停止root@Docker:~# ifconfig | grep docker0   #docker默认网桥docker0 Link encap:以太网 硬件地址 56:84:7a:fe:97:99root@Docker:~# ifconfig docker0 down    #停止docker默认网桥root@Docker:~# brctl show          #查看物理机上有哪些网桥root@Docker:~# brctl delbr docker0     #删除docker默认网桥root@Docker:~# brctl addbr docker_new0   #自定义网桥root@Docker:~# ifconfig docker_new0 192.168.6.1 netmask 255.255.255.0  #给自定义网桥指定IP和子网root@Docker:~# ifconfig | grep docker_new0 #查看发现自定义网桥已经启动docker_new0 Link encap:以太网 硬件地址 0a:5b:26:48:dc:04      inet 地址:192.168.6.1 广播:192.168.6.255 掩码:255.255.255.0root@Docker:~# echo 'DOCKER_OPTS="-b=docker_new0"' >> /etc/default/docker #指定网桥写入docker配置文件root@Docker:~# service docker start     #启动dockerroot@Docker:~# ps -ef | grep docker     #成功启动,并且成功加载了docker_new0root  21345  1 0 18:44 ?    00:00:00 /usr/bin/docker -d -b=docker_new0root@Docker:~# brctl show          #查看当前网桥下是否有容器连接bridge name       bridge id       STP enabled  interfacesdocker_new0      8000.fa3ce276c3b9      no      root@Docker:~# docker run -itd CentOS:centos6 /bin/bash         #创建容器测试root@Docker:~# docker attach 7f8ff622237f                #进入容器[root@7f8ff622237f /]# ifconfig eth0 | grep addr             #容器IP已经和自定义网桥一个网段,该容器IP为DHCP自动分配,不属于指定固定IPeth0   Link encap:Ethernet HWaddr 02:42:C0:A8:06:02      inet addr:192.168.6.2 Bcast:0.0.0.0 Mask:255.255.255.0     inet6 addr: fe80::42:c0ff:fea8:602/64 Scope:Linkroot@Docker:~# brctl show          #该网桥上已经连接着一个网络设备了bridge name        bridge id       STP enabled  interfacesdocker_new0      8000.fa3ce276c3b9      no     veth17f560a
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表