ubuntu下docker固定IP配置及桥接

ubuntu下docker固定IP配置及桥接


一、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)、自定义新网桥

[email protected]:~# dpkg -l | grep bridge*        #查看是否有安装brctl命令包

ii  bridge-utils   1.5-6ubuntu2     amd64        Utilities for configuring the Linux Ethernet bridge

[email protected]:~# apt-get install bridge-utils  #安装brctl命令包

[email protected]:~# docker -v                     #docker版本

Docker version 1.5.0, build a8a31ef

[email protected]:~# ps -ef | grep docker          #正在运行

root      6834     1  0 16:28 ?        00:00:00 /usr/bin/docker -d

[email protected]:~# service docker stop           #停止

[email protected]:~# ifconfig | grep docker0       #docker默认网桥

docker0   Link encap:以太网  硬件地址 56:84:7a:fe:97:99

[email protected]:~# ifconfig docker0 down         #停止docker默认网桥

[email protected]:~# brctl show                    #查看物理机上有哪些网桥

[email protected]:~# brctl delbr docker0           #删除docker默认网桥

[email protected]:~# brctl addbr docker_new0       #自定义网桥

[email protected]:~# ifconfig docker_new0 192.168.6.1 netmask 255.255.255.0     #给自定义网桥指定IP和子网

[email protected]:~# 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

[email protected]:~# echo ‘DOCKER_OPTS="-b=docker_new0"‘ >> /etc/default/docker #指定网桥写入docker配置文件

[email protected]:~# service docker start          #启动docker

[email protected]:~# ps -ef | grep docker          #成功启动,并且成功加载了docker_new0

root     21345     1  0 18:44 ?        00:00:00 /usr/bin/docker -d  -b=docker_new0

[email protected]:~# brctl show                    #查看当前网桥下是否有容器连接

bridge name               bridge id               STP enabled     interfaces

docker_new0             8000.fa3ce276c3b9            no

[email protected]:~# docker run -itd centos:centos6 /bin/bash                   #创建容器测试

[email protected]:~# docker attach 7f8ff622237f                                 #进入容器

[[email protected] /]# 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

[email protected]:~# 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会消失,还需要重新指定,容器量大时可写个脚本来完成

[email protected]:~#  wget https://github.com/jpetazzo/pipework/archive/master.zip #下载 pipework

[email protected]:~#  unzip master.zip             #解压

[email protected]:~# cp pipework-master/pipework  /usr/bin/                      #拷贝pipework到 /usr/bin/下

[email protected]:~# chmod +x /usr/bin/pipework    #赋予该命令执行权限

[email protected]:~# pipework docker_new0 -i eth1 $(docker run -itd -p 9197:80 centos:centos6 /bin/bash) 192.168.6.27/[email protected] #创建容器,并指定固定IP

格式:pipework  网桥名 -i 指定在那块网卡上配置  <容器名or容器ID>  指定容器内IP/子网@网关   容器内网关就是物理机网桥的IP

[email protected]:~# docker attach 2966430e2dbe     #进入新容器

[[email protected] /]# 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

[[email protected] /]# 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

[[email protected] /]# ping www.baidu.com     #测试网络

PING www.a.shifen.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

[[email protected] /]# netstat -anptu | grep 80                              #容器内80端口已经开启

tcp        0      0 :::80                       :::*                        LISTEN      -

[email protected]:~# telnet 192.168.6.27 80         #物理机上测试指定的IP是否和映射的端口等通信正常

Trying 192.168.6.27...

Connected to 192.168.6.27.

Escape character is ‘^]‘.

[email protected]:~# iptables-save > iptables-rules #拷贝防火墙规则到本地文件

[email protected]:~# vi iptables-rules              #打开规则文件查看

你会发现你物理机的防火墙自动添加了很多条规则,这个是容器到网桥到本地网卡到公网的地址转换通信规则

Pipework更多命令用法请参照 :

https://github.com/jpetazzo/pipework

时间: 2024-12-21 15:10:06

ubuntu下docker固定IP配置及桥接的相关文章

ubuntu 下telnet服务安装配置

1. sudo apt-get install xinetd telnetd 2. sudo vim /etc/xinetd.conf并加入以下内容进行下一步的Ubuntu Linux telnet设置: # Simple configuration file for xinetd # # Some defaults, and include /etc/xinetd.d/ defaults { # Please note that you need a log_type line to be a

ubuntu下 openvpn客户端的配置

1.安装openvpn sudo apt-get install openvpn 2.配置openvpn 作为客户端,OpenVPN并没有特定的配置文件,而是由服务器提供方给出一个配置文件.对于认证,OpenVPN提供了两种认证方法:基于用户名/密码的认证与SSL证书认证.用户名/密码的认证方法无法(或较难)限制一个账号同时连接多个客户端,而采用证书,则可保证同一证书同一时间只能有 一个客户端连接.当然,这些都是由服务器端决定的,不需要客户端进行选择. 首先将OpenVPN服务器提供商发给你的配

[例子]Ubuntu虚拟机设置固定IP上网

宿主机器     win7 linux            Ubuntu 14.04 LTS 参考: Linux系列:Ubuntu虚拟机设置固定IP上网(配置IP.网关.DNS.防止resolv.conf被重写) 1  win7 设置虚拟网卡8 2 设置虚拟机 进入后, 先恢复默认设置. 在着呢对VMnet8进行设置 3 进入linux 通过ifconfig查看当前网卡 在linux中通过ifconfig可以看到的当前linux的网卡.(默认好像是从0开始排序) 在虚拟机中的eth0应该就是我

ubuntu下docker安装与版本升级

ubuntu 下docker安装与版本升级 一.系统环境 系统:ubuntu-server 14.04 x86_64 内核:3.13.0-32-generic 二.Docker安装 --------------------------------------------------------------------------------- 要想安装最新版本的Docker需要使用Docker源来安装 $ sudo su - root # apt-get -y installapt-transp

Ubuntu 16设置固定IP和DNS

ubuntu 16  设置固定ip地址和dns 1.设置ip地址 vi /etc/network/interfaces 添加如下内容: # The primary network interface # ens160是网卡,不知道自己是什么样的网卡,可以通过命令ip addr查看auto ens160iface ens160 inet static # 设置固定的ip地址,如下示例address 10.0.0.2 # 子网和网关可以通过route -n查看netmask 255.255.255.

Ubuntu下bochs的安装配置

目前市面上流行的全虚拟化PC仿真软件系统主要有三种:VMware公司的VMware Workstation软件.Microsoft公司的Virtual PC以及开放源代码的Bochs.这3种软件都可以虚拟或仿真Intel x86硬件环境,可以让我们在运行这些软件的系统平台上运行多种其它的"客户"操作系统. 就使用范围和运行性能来说,这3种仿真软件有一定的区别.Bochs仿真了x86的硬件环境(CPU的指令)及其外围设备,因此很容易被移植到很多操作系 统上或者不同体系结构的平台上.由于主

Ubuntu下串口minicom的配置

一般的配置方法过程如下: 1.安装软件 sudo apt-get install minicom 2.查看端口 找到端口: 这里要注意下,我们用的是USB 转串口,所以其设备是名称要注意,输入以下命令找到USB转串口的位置 dmesg | grep usb 假如有以下内容: [ 7415.893942] usbserial: USB Serial Driver core [ 7415.931116] usb 3-1: ark3116 converter now attached to ttyUS

ubuntu下openoffice开发环境配置

安装openoffice或者liboffice 路径:/usr/lib/openoffice/program ,soffice 开启服务: 安装JDK - 其默认路径:jdk7 版本号:1.7...,jdk6版本号:1.6... jodconvert的安装 http://ncu.dl.sourceforge.net/project/jodconverter/JODConverter/2.2.2/jodconverter-2.2.2.zip java -jar /tmp/ppt2pdf/jodco

新版raspbian系统的固定IP配置和启用root账户的ssh登录功能的方法

1. 2016新版raspbian系统的固定IP配置: 自2016年2月份新版raspbian系统发布以后,树莓派的固定IP配置方法就与之前不一样了. 之前在raspbian系统中编辑/etc/network/interfaces文件就可以生效的固定IP配置,在新版raspbian系统中完全无法使用.但新方法貌似也比较简单: 首先,确认/etc/network/interfaces中, iface eth0 inet manual 这行,末尾是manual,然后,编辑/etc/dpcpcd.co