阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Ubuntu下Docker固定IP配置及桥接

200次阅读
没有评论

共计 5188 个字符,预计需要花费 13 分钟才能阅读完成。

一、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 bridge

root@Docker:~# apt-get install bridge-utils  #安装 brctl 命令包

root@Docker:~# docker -v                    #docker 版本

Docker version 1.5.0, build a8a31ef

root@Docker:~# ps -ef | grep docker          #正在运行 
root      6834    1  0 16:28 ?        00:00:00 /usr/bin/docker -d

root@Docker:~# service docker stop          #停止

root@Docker:~# ifconfig | grep docker0      #docker 默认网桥
docker0  Link encap: 以太网  硬件地址 56:84:7a:fe:97:99

root@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.0

root@Docker:~# echo ‘DOCKER_OPTS=”-b=docker_new0″‘ >> /etc/default/docker #指定网桥写入 docker 配置文件

root@Docker:~# service docker start          #启动 docker

root@Docker:~# ps -ef | grep docker          #成功启动,并且成功加载了 docker_new0
root    21345    1  0 18:44 ?        00:00:00 /usr/bin/docker -d  -b=docker_new0

root@Docker:~# brctl show                    #查看当前网桥下是否有容器连接
bridge name              bridge id              STP enabled    interfaces
docker_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 自动分配,不属于指定固定 IP
eth0      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:Link

root@Docker:~# brctl show                    #该网桥上已经连接着一个网络设备了
bridge name                bridge id              STP enabled    interfaces
docker_new0            8000.fa3ce276c3b9            no          veth17f560a

注:veth 设备是成双成对出现的,一端是容器内部命名 eth0,一端是加入到网桥并命名的 veth17f560a(通常命名为 veth*),他们组成了一个数据传输通道,一端进一端出,veth 设备连接了两个网络设备    并实现了数据通信。

2)、Pipework 配置 Docker 固定 IP
我们在自定义网桥的基础上去做固定 IP 配置

Pipework 有个缺点就是给容器指定完固定 IP,如果容器重启,那么固定 IP 会消失,还需要重新指定,容器量大时可写个脚本来完成

root@Docker:~#  wget https://github.com/jpetazzo/pipework/archive/master.zip #下载 pipework

root@Docker:~#  unzip master.zip            #解压

root@Docker:~# cp pipework-master/pipework  /usr/bin/                      #拷贝 pipework 到 /usr/bin/ 下

root@Docker:~# chmod +x /usr/bin/pipework    #赋予该命令执行权限

root@Docker:~# pipework docker_new0 -i eth1 $(docker run -itd -p 9197:80 centos:centos6 /bin/bash) 192.168.6.27/24@192.168.6.1 #创建容器, 并指定固定 IP
格式:pipework  网桥名 -i 指定在那块网卡上配置  < 容器名 or 容器 ID>  指定容器内 IP/ 子网 @网关  注:容器内网关就是物理机网桥的 IP             

 

root@Docker:~# docker attach 2966430e2dbe    #进入新容器
 

[root@2966430e2dbe /]# ifconfig              #容器内 IP 为指定的 IP 192.168.6.27
eth0      Link encap:Ethernet  HWaddr 02:42:C0:A8:06:05                   
          inet addr:192.168.6.7  Bcast:0.0.0.0  Mask:255.255.255.0        #docker_new0 网桥创建容器时 DHCP 分配的 IP

eth1      Link encap:Ethernet  HWaddr 82:DB:F7:A3:33:92 
          inet addr:192.168.6.27  Bcast:0.0.0.0  Mask:255.255.255.0        #pipework 指定的固定 IP,网桥还是 docker_new0

[root@2966430e2dbe /]# route -n              #查看路由路径
Kernel IP routing table
Destination    Gateway        Genmask        Flags Metric Ref    Use Iface
0.0.0.0        192.168.6.1    0.0.0.0        UG    0      0        0 eth0
192.168.6.0    0.0.0.0        255.255.255.0  U    0      0        0 eth0
192.168.6.0    0.0.0.0        255.255.255.0  U    0      0        0 eth1

[root@2966430e2dbe /]# ping www.linuxidc.com    #测试网络
PING www.linuxidc.com (119.75.218.70) 56(84) bytes of data.
64 bytes from 119.75.218.70: icmp_seq=1 ttl=127 time=3.98 ms
64 bytes from 119.75.218.70: icmp_seq=2 ttl=127 time=2.98 ms

[root@2966430e2dbe /]# netstat -anptu | grep 80                              #容器内 80 端口已经开启
tcp        0      0 :::80                      :::*                        LISTEN      –

root@Docker:~# telnet 192.168.6.27 80        #物理机上测试指定的 IP 是否和映射的端口等通信正常
Trying 192.168.6.27…
Connected to 192.168.6.27.
Escape character is ‘^]’.

root@Docker:~# iptables-save > iptables-rules #拷贝防火墙规则到本地文件

root@Docker:~# vi iptables-rules              #打开规则文件查看
你会发现你物理机的防火墙自动添加了很多条规则,这个是容器到网桥到本地网卡到公网的地址转换通信规则

Ubuntu 下 Docker 固定 IP 配置及桥接

Pipework 更多命令用法请参照:
https://github.com/jpetazzo/pipework

CentOS 6/ 7 系列安装 Docker http://www.linuxidc.com/Linux/2014-07/104768.htm

Docker 的搭建 Gitlab CI 全过程详解 http://www.linuxidc.com/Linux/2013-12/93537.htm

Docker 安装应用(CentOS 6.5_x64) http://www.linuxidc.com/Linux/2014-07/104595.htm

在 Docker 中使用 MySQL http://www.linuxidc.com/Linux/2014-01/95354.htm

在 Ubuntu Trusty 14.04 (LTS) (64-bit)安装 Docker http://www.linuxidc.com/Linux/2014-10/108184.htm

Docker 安装应用(CentOS 6.5_x64) http://www.linuxidc.com/Linux/2014-07/104595.htm

Ubuntu 14.04 安装 Docker  http://www.linuxidc.com/linux/2014-08/105656.htm

阿里云 CentOS 6.5 模板上安装 Docker http://www.linuxidc.com/Linux/2014-11/109107.htm

Docker 的详细介绍:请点这里
Docker 的下载地址:请点这里

更多 Ubuntu 相关信息见Ubuntu 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=2

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-20发表,共计5188字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中