通过pipework来固定Docker容器IP

Docker容器固定IP分配

我们在使用docker run创建Docker容器时,可以用--net选项指定容器的网络模式,Docker有以下4种网络模式:

1. host模式,使用--net=host指定。

2. container模式,使用--net=container:NAME_or_ID指定。

3. none模式,使用--net=none指定。

4. bridge模式,使用--net=bridge指定,默认设置。

默认选择bridge的情况下,容器启动后会通过DHCP获取一个地址,这可能不是我们想要的,本文介绍在ubuntu docker环境下使用pipework脚本对容器分配固定IP。

Pipework是由Docker的一个工程师设计的解决方案,它让容器能够在“任意复杂的场景”下进行连接。Pipework是Docker的一个网络功能增强插件,它使用了cgroups和namespacpace。

但是容器停止后在启动ip就的重新指定。

# step1: install  plug
wget https://github.com/jpetazzo/pipework/archive/master.zip
unzip master.zip
cp pipework-master/pipework  /usr/local/bin/
chmod +x /usr/local/bin/pipework 

# step2:  get bridge name and set other contains
brctl show |awk ‘NR==2{print $1}‘
#brctl show #detail

# step3:  example set fixed ip 
pipework docker0 test1 172.17.0.20/[email protected]
# |        |      |         |      | |   |_________  docker 容器镜像内的gateway (以后可以划分vlan)
# |        |      |         |      | |    
# |        |      |         |      | |_____________  固定字符
# |        |      |         |      | 
# |        |      |         |      |_______________  docker 容器ip的子网
# |        |      |         |    
# |        |      |         |______________________  docker 容器内网IP
# |        |      |       
# |        |      |________________________________  docker 容器的名字
# |        |      
# |        |_______________________________________  网桥的name
# |        
# |________________________________________________  固有命令
[email protected]:/home/leco# cat /etc/issue
Ubuntu 16.10 \n \l
[email protected]:/home/leco# docker images |grep centos
centos                                          latest              a8493f5f50ff        2 weeks ago         192 MB
jdeathe/centos-ssh                              latest              841c208badec        2 months ago        214 MB
[email protected]:/home/leco# docker run -idt  --net=none --name test1  centos /bin/bash
26079d0851aeed3f2dd4eb93e1db1943ac5baebebedafe16ed2d913ceaae1723
[email protected]:/home/leco# pipework docker0 test1 172.17.0.20/[email protected]
[email protected]:/home/leco# docker exec -it 26079d0851a bash
[[email protected] /]# yum install -y net-tools
Loaded plugins: fastestmirror, ovl
base                                                                                                                                            | 3.6 kB  00:00:00     
extras                                                                                                                                          | 3.4 kB  00:00:00     
updates                                                                                                                                         | 3.4 kB  00:00:00     
(1/4): base/7/x86_64/group_gz                                                                                                                   | 155 kB  00:00:00     
(2/4): base/7/x86_64/primary_db                                                                                                                 | 5.6 MB  00:00:01     
(3/4): extras/7/x86_64/primary_db                                                                                                               | 151 kB  00:00:02     
(4/4): updates/7/x86_64/primary_db                                                                                                              | 4.8 MB  00:00:11     
Determining fastest mirrors
 * base: mirrors.cn99.com
 * extras: mirrors.cn99.com
 * updates: mirrors.163.com
Resolving Dependencies
--> Running transaction check
---> Package net-tools.x86_64 0:2.0-0.17.20131004git.el7 will be installed
--> Finished Dependency Resolution
Dependencies Resolved
=======================================================================================================================================================================
 Package                               Arch                               Version                                               Repository                        Size
=======================================================================================================================================================================
Installing:
 net-tools                             x86_64                             2.0-0.17.20131004git.el7                              base                             304 k
Transaction Summary
=======================================================================================================================================================================
Install  1 Package
Total download size: 304 k
Installed size: 917 k
Downloading packages:
warning: /var/cache/yum/x86_64/7/base/packages/net-tools-2.0-0.17.20131004git.el7.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID f4a80eb5: NOKEY
Public key for net-tools-2.0-0.17.20131004git.el7.x86_64.rpm is not installed
net-tools-2.0-0.17.20131004git.el7.x86_64.rpm                                                                                                   | 304 kB  00:00:00     
Retrieving key from file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
Importing GPG key 0xF4A80EB5:
 Userid     : "CentOS-7 Key (CentOS 7 Official Signing Key) <[email protected]>"
 Fingerprint: 6341 ab27 53d7 8a78 a7c2 7bb1 24c6 a8a7 f4a8 0eb5
 Package    : centos-release-7-3.1611.el7.centos.x86_64 (@CentOS)
 From       : /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Installing : net-tools-2.0-0.17.20131004git.el7.x86_64                                                                                                           1/1 
  Verifying  : net-tools-2.0-0.17.20131004git.el7.x86_64                                                                                                           1/1 
Installed:
  net-tools.x86_64 0:2.0-0.17.20131004git.el7                                                                                                                          
Complete!
[[email protected] /]# ifconfig
eth1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.17.0.20  netmask 255.255.255.0  broadcast 0.0.0.0
        inet6 fe80::d022:6ff:feef:f089  prefixlen 64  scopeid 0x20<link>
        ether d2:22:06:ef:f0:89  txqueuelen 1000  (Ethernet)
        RX packets 7309  bytes 11981498 (11.4 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 5611  bytes 432934 (422.7 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1  (Local Loopback)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

        
# step restart this container 
[email protected]:/home/leco# docker stop 26079d0851ae 
26079d0851ae
[email protected]:/home/leco# docker start 26079d0851ae 
26079d0851ae
[email protected]:/home/leco# docker exec -it 26079d0851ae bash
[[email protected] /]# ifconfig
lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1  (Local Loopback)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
[email protected]:/home/leco# pipework docker0 test1 172.17.0.20/[email protected]
[email protected]:/home/leco# docker exec -it 26079d0851ae bash
[[email protected] /]# ifconfig 
eth1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.17.0.20  netmask 255.255.255.0  broadcast 0.0.0.0
        inet6 fe80::c893:e6ff:fede:a2ab  prefixlen 64  scopeid 0x20<link>
        ether ca:93:e6:de:a2:ab  txqueuelen 1000  (Ethernet)
        RX packets 12  bytes 1036 (1.0 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 8  bytes 620 (620.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1  (Local Loopback)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
[[email protected] /]# ping baidu.com
PING baidu.com (220.181.57.217) 56(84) bytes of data.
64 bytes from 220.181.57.217 (220.181.57.217): icmp_seq=1 ttl=53 time=24.8 ms
64 bytes from 220.181.57.217 (220.181.57.217): icmp_seq=2 ttl=53 time=24.9 ms
^C
--- baidu.com ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1002ms
rtt min/avg/max/mdev = 24.838/24.896/24.954/0.058 ms
时间: 2024-10-08 13:37:07

通过pipework来固定Docker容器IP的相关文章

docker容器ip地址的设定

mynetwork是自己定的网络名称 上图首句是用来查看容器的所有信息,第二句是查看所有容器的ip地址 创建具体网段的操作 创建固定ip的容器 指定了固定ip之后容器重启ip地址依然不会改变 -----------------------------------------------------------------------------------------------------------------手动分割-------------------------------------

使用pipework配置docker容器固定ip

首先讲一下docker的网络模式: 我们使用docker run创建容器时,可以使用--net选项指定容器的网络模式,docker一共有4中网络模式: 1:bridge模式,--net=bridge(默认). 这是dokcer网络的默认设置.安装完docker,系统会自动添加一个供docker使用的网桥docker0,我们创建一个新的容器时,容器通过DHCP获取一个与docker0同网段的IP地址.并默认连接到docker0网桥,以此实现容器与宿主机的网络互通.如下: 2:host模式,--ne

Docker容器固定IP分配

我们在使用docker run创建Docker容器时,可以用--net选项指定容器的网络模式,Docker有以下4种网络模式: host模式,使用--net=host指定. container模式,使用--net=container:NAME_or_ID指定. none模式,使用--net=none指定. bridge模式,使用--net=bridge指定,默认设置. 默认选择bridge的情况下,容器启动后会通过DHCP获取一个地址,这可能不是我们想要的,本文介绍在centos7 docker

金庸武功之“易筋经”--docker pipework 设置容器IP在宿主机网段

一.主机环境及环境准备 宿主机IP:192.168.1.107 宿主机网关:192.168.1.1 容器IP:目的是设置为192.168.1.108 关闭Selinux 设置为网卡桥接模式 关闭防火墙 yum install bridge-utils -y yum install git -y 二.安装docker 增加repo tee /etc/yum.repos.d/docker.repo <<-'EOF' [dockerrepo] name=Docker Repository baseu

pipework安装 及分配容器固定IP

OS:centos7.0 第一步: [email protected] ~]# yum -y install git 第二步: [[email protected] ~]# git clone https://github.com/jpetazzo/pipework.git 第三步: [[email protected] ~]# cp -rp pipework/pipework /usr/local/bin/ 第四步:查看images [[email protected] ~]# docker

Docker容器学习梳理--容器间网络通信设置(Pipework和Open vSwitch)

自从Docker容器出现以来,容器的网络通信就一直是被关注的焦点,也是生产环境的迫切需求.容器的网络通信又可以分为两大方面:单主机容器上的相互通信,和跨主机的容器相互通信.下面将分别针对这两方面,对容器的通信原理进行简单的分析,帮助大家更好地使用docker.前面已经在Docker容器学习梳理--基础知识(2)这一篇中详细介绍了Docker的网络配置以及pipework工具. docker单主机容器通信 基于对net namespace的控制,docker可以为在容器创建隔离的网络环境,在隔离的

Docker 网络之pipework 工具(3)单主机Docker容器VLAN划分

pipework不仅可以使用Linux bridge连接Docker容器,还可以与OpenVswitch结合,实现Docker容器的VLAN划分.下面,就来简单演示一下,在单机环境下,如何实现Docker容器间的二层隔离.为了演示隔离效果,我们将4个容器放在了同一个IP网段中.但实际他们是二层隔离的两个网络,有不同的广播域. 安装openvswitch 安装基础环境 [[email protected] ~]# yum -y install gcc make python-devel opens

Docker 网络之pipework 工具(2)将Docker容器配置到本地网络环境中

为了使本地网络中的机器和Docker容器更方便的通信,我们经常会有将Docker容器配置到和主机同一网段的需求.这个需求其实很容易实现,我们只要将Docker容器和主机的网卡桥接起来,再给Docker容器配上IP就可以了.下面我们来操作一下,我主机A地址为192.168.1.107/24,网关为192.168.1.1,需要给Docker容器的地址配置为192.168.1.150/24.在主机A上做如下操作:安装pipework下载地址:wgethttps://github.com/jpetazz

docker容器设置静态IP与宿主机同一网段通信

很早以前弄过docker容器设置静态ip地址以及容器与容器之间通信,用的不多所以没有记录下来. 今天在网上看到个文章关于设置静态ip地址的.就自己实战下.对了还有个pipework也可以设置.. 操作系统环境 [email protected]:~# cat /etc/issue Ubuntu 14.04.3 LTS \n \l 宿主机(系统采用ubuntu-14.04.1-server-amd64)的网络采用桥接模式(默认是DHCP模式,还有一种模式就是静态IP),网桥的网段与物理网段相同.目