利用pipework为docker容器设置固定IP

今天介绍如何在redhat/centos7系列机器上使用pipework为docker启动的容器指定一个固定ip,我们知道默认情况下,docker会使用bridge网络模式为每一个启动的容器动态分配一个IP,以172.17.0.1为网关,172.17.0.2,172.17.0.3依次类推作为容器的ip,这样也算是每个容器有了ip,当下次启动多个容器的时候IP还是会按照这种方式分配,表面上还是一个固定IP的方式,但是这种方式对容器启动顺序有严格的要求。还有一种方式就是通过人为指定IP的方式,这种方式就是今天讲的利用pipework为容器指定IP。

    启动容器时可以通过--net=none指定容器网络模式。有四种网络模式可以选择:host,container,none,bridge(默认),如果不设置这个参数,那么默认就是bridge的模式,采用dhcp的方式分配IP。使用pipework为容器指定ip,对宿主机有要求,需要宿主机有网桥,对redhat7可以使用yum install bridge-utils来安装网桥,安装完成之后设置网桥的IP就可以了。

    下面一步一步来通过pipework为docker容器指定ip(前提是机器上已经安装了docker服务,并且服务开启,有镜像可使用):

    第一步、安装网桥设备;

yum install -y bridge-utils

安装完毕即可在命令行下通过brctl 命令查看网桥

    第二步、设置网络地址,我们假定宿主机是固定IP,并设置了网关;

    vi /etc/sysconfig/network-scripts/ifcfg-eno16777728

TYPE=Ethernet
BOOTPROTO=none
DEFROUTE=yes
PEERROUTES=yes
PEERDNS=yes
NAME=eno16777728
UUID=00f2e830-ed07-4ace-9e54-56a325e3a690
ONBOOT=yes
#IPADDR0=192.168.61.150
#PREFIX0=24
#GATEWAY0=192.168.61.2
#DNS1=192.168.61.2
HWADDR=00:0C:29:F7:22:81
BRIDGE="br-ex"
     vi /etc/sysconfig/network-scripts/ifcfg-br-ex

TYPE=Bridge
BOOTPROTO=static
IPADDR=192.168.61.150
NETMASK=255.255.255.0
GATEWAY=192.168.61.2
PREFIX=24
DNS1=192.168.61.2
NAME=br-ex
ONBOOT=yes
DEVICE=br-ex
    以上修改即为设置IP,设置完毕可以通过命令service network restart重启网络

[root@docker ~]# brctl show
bridge name     bridge id               STP enabled     interfaces
br-ex           8000.000c29f72281       no              eno16777728
                                                                               veth1pl90365
docker0         8000.0242dda719e2       no

第三步、启动docker容器并指定网络模式为none

[root@docker ~]# docker images
REPOSITORY            TAG                IMAGE ID               CREATED                        SIZE
docker.io/zookeeper   latest              19604ac4a163        Less than a second ago   143 MB
redis                           latest               07818b5b6de8        8 hours ago                      482.9 MB
[root@docker ~]# docker run -it -d --net=none --name ip-test redis /bin/bash
[root@docker ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
4190f301a367        redis               "/bin/bash"         55 minutes ago      Up 55 minutes                           ip-test
    第四步、获取pipework可执行程序

[root@docker ~]# git clone https://github.com/jpetazzo/pipework.git
[root@docker ~]# cd pipework/
[root@docker pipework]# ls
docker-compose.yml  doctoc  LICENSE  pipework  pipework.spec  README.md
[root@docker ~]# cd ..
[root@docker ~]# cp -rp pipework/pipework /usr/local/bin
    第五步、设置docker容器IP

[root@docker ~]# pipework br-ex ip-test 192.168.61.100/[email protected]

 第六步、验证IP设置是否正确

[root@docker ~]# ping 192.168.61.100
PING 192.168.61.100 (192.168.61.100) 56(84) bytes of data.
64 bytes from 192.168.61.100: icmp_seq=1 ttl=64 time=0.206 ms
64 bytes from 192.168.61.100: icmp_seq=2 ttl=64 time=0.081 ms
^C
--- 192.168.61.100 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1001ms
rtt min/avg/max/mdev = 0.081/0.143/0.206/0.063 ms
 

发布了51 篇原创文章 · 获赞 9 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/weixin_39891030/article/details/86214307
今日推荐