配置docker静态IP地址

Docker的4种网络模式

Docker有以下4种网络模式:

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

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

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

bridge模式,使用--net=bridge指定,默认就是bridge模式。

默认选择bridge的情况下,容器启动后会通过DHCP获取一个地址,这可能不是我们想要的,在centos7系统上, docker环境下可以使用pipework脚本对容器分配固定IP(这个IP可以是和物理机同网段IP)。

注: docker 默认是bridge(--net=bridge)模式,相当于VMware中NAT模式。   

docker环境下可以使用pipework脚本对容器分配固定IP,相当于VMware中桥接模式。

注:Pipework有个缺陷,容器重启后IP设置会自动消失,需要重新设置。

配置桥接网络:

桥接本地物理网络的目的,是为了局域网内用户方便访问docker实例中服务,不要需要各种端口映射即可访问服务。  但是这样做,又违背了docker容器的安全隔离的原则,工作中辩证的选择.

创建桥设备br0:

安装包:

# rpm -ivh /mnt/Packages/bridge-utils-1.5-9.el7.x86_64.rpm

把ens33绑到br0桥设备上:

[root@xuegod63 ~]# cd /etc/sysconfig/network-scripts/

[root@xuegod63 network-scripts]# cp ifcfg-ens33 /opt/     #备份一下eth0

[root@xuegod63 network-scripts]# vim ifcfg-ens33#编辑配置文件为以下内容

TYPE="Ethernet"

BOOTPROTO="none"

DEFROUTE="yes"

IPV4_FAILURE_FATAL="no"

IPV6INIT="yes"

IPV6_AUTOCONF="yes"

IPV6_DEFROUTE="yes"

IPV6_FAILURE_FATAL="no"

NAME="ens33"

UUID="7a556ff6-f865-4549-b08f-9e526c9bb638"

DEVICE="ens33"

ONBOOT="yes"

IPADDR="192.168.1.63"    #删除IP地址相关内容,删除下面4行

PREFIX="24"

GATEWAY="192.168.1.1"

DNS1="8.8.8.8"

IPV6_PEERDNS="yes"

IPV6_PEERROUTES="yes"

IPV6_PRIVACY="no"

BRIDGE="br0"    #在文件最后插入这一行,表示把ens33桥接到br0上

 

生成桥设备br0的配置文件:

[root@xuegod63 network-scripts]# vim  ifcfg-br0  #创建ifcfg-br0 文件,并写入以下内容

DEVICE="br0"

NM_CONTROLLED="yes" 

ONBOOT="yes"

TYPE="Bridge"

BOOTPROTO=none

IPADDR=192.168.1.63

NETMASK=255.255.255.0

GATEWAY=192.168.1.1

DNS1=114.114.114.114

注:TYPE="Bridge"  

[root@xuegod63 network-scripts]# service  network restart

Restarting network (via systemctl):                        [  确定  ]

 

测试br0:

root@xuegod63 network-scripts]# ifconfig

 

[root@xuegod63 network-scripts]# ping g.cn

PING g.cn (203.208.37.20) 56(84) bytes of data.

64 bytes from 203.208.37.20: icmp_seq=1 ttl=57 time=12.3 ms

使用pipework配置静态IP

方法1:直接下载pipework  zip包

https://github.com/jpetazzo/pipework

把pipework-master.zip上传到Linux中

方法2:使用git获得:

git下载链接:https://github.com/jpetazzo/pipework.git

# git clone  https://github.com/jpetazzo/pipework.git

将 pipework-master.zip上传服务器上:

# unzip pipework-master.zip   # 解压

#不需要编译,因为pipework 是一个shell脚本

# cp /root/pipework-master/pipework   /usr/local/bin/    #方便后期使用pipework命令

# which pipework     #查看命令可用

到此 pipework已经安装成功。

使用静态IP启动一个docker实例

例:以none模式,使用--net=none  启动一个容器,并且开启docker特权模式。

[root@xuegod63 ~]# docker run -itd --net=none --privileged=true centos  bash

扩展:

--privileged=true   #允许开启特权功能

使用privileged启动的容器,可以看到很多host上的设备,并且可以执行mount。甚至允许你在docker容器中启动docker容器。不启用privileged,容器中root用户不能执行mount。

    启动并查看容器ID

# docker run  -itd --net=none --privileged=true centos:latest bash

759828e9e369be61be5f615c6288348989b245189ef094537b769945b95d025b

# docker ps

CONTAINER ID   IMAGE           COMMAND   CREATED         STATUS         PORTS     NAMES

759828e9e369   centos:latest   "bash"    7 minutes ago   Up 7 minutes             distracted_gauss

给此容器配置地址:

pipework语法:pipework 网桥名  容器实例ID  分配给容器的IP/掩码@网关

# pipework br0 759828e9e369 192.168.3.79/[email protected]

# ping 192.168.3.79

PING 192.168.3.79 (192.168.3.79) 56(84) bytes of data.

64 bytes from 192.168.3.79: icmp_seq=1 ttl=64 time=0.112 ms

64 bytes from 192.168.3.79: icmp_seq=2 ttl=64 time=0.104 ms

# docker inspect   容器实例ID  #查看容器的详细情况

进入容器,测试网络:

[root@xuegod63 ~]# docker exec -it e4698f625a56 /bin/bash  #进入容器

注:容器的DNS地址,会直接使用物理机的dns

# docker exec -it 759828e9e369 /bin/bash

# cat /etc/resolv.conf

# Generated by NetworkManager

nameserver 114.114.114.114

nameserver 223.5.5.5

# yum install -y net-tools  #安装ifconfig命令

image.png

查看路由:# route -n

        image.png

实战1: 使用静态IP启动的docker实例运行,一个web服务器

[root@759828e9e369 /]# yum install httpd -y

[root@759828e9e369 /]# systemctl start httpd    #这个方式,无法启动

Failed to get D-Bus connection: Operation not permitted

[root@759828e9e369 /]# /usr/sbin/httpd -DFOREGROUND &

[root@759828e9e369 /]# netstat -antup | grep 80     #查看服务监听端口是否启动

[root@759828e9e369 /]# echo 192.168.3.79 > /var/www/html/index.html        #生成默认首页内容

扩展:非正常方法关闭docker 实例 

[root@CentOS7 pipework-master]# docker ps
CONTAINER ID   IMAGE           COMMAND   CREATED          STATUS          PORTS     NAMES
759828e9e369   centos:latest   "bash"    49 minutes ago   Up 49 minutes             distracted_gauss
[root@CentOS7 pipework-master]# docker inspect 759828e9e369 | grep Pid    #查看docker的pid
            "Pid": 22710,
            "PidMode": "",
            "PidsLimit": null,
[root@CentOS7 pipework-master]# kill -9 22710     #找到docker的pid,直接kill掉,也可以关闭docker。注:从而大家可以看出docker的实例就是一个进程。所以运行docker实例时,就像运行本地的一个程序,所以docker效率高。
[root@CentOS7 pipework-master]# docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
[root@CentOS7 pipework-master]# docker ps -a
CONTAINER ID   IMAGE             COMMAND                  CREATED          STATUS                        PORTS     NAMES
759828e9e369   centos:latest     "bash"                   50 minutes ago   Exited (137) 17 seconds ago             distracted_gauss
c37488d568fb   centos:httpd-v2   "/bin/sh -c /usr/loc…"   2 hours ago      Exited (137) 54 minutes ago             musing_engelbart
c40163b59e62   centos:latest     "/bin/sh -c 'while t…"   2 hours ago      Exited (137) 54 minutes ago             nervous_hypatia
[root@CentOS7 pipework-master]#

步骤总结:

1、创建一个br0桥接设备

2、下载pipework 包并安装

3、安装并运行docker

4、导入centos docker 镜像

5、启动一个docker实例  注意加参数:  --net=none --privileged=true

6、使用pipework 给docker实例配置IP




版权声明:
作者:WaterBear
链接:https://l-t.top/2077.html
来源:雷霆运维
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
< <上一篇
下一篇>>
文章目录
关闭
目 录