创建docker静态IP
实验环境:一个还原到之前安装了docker的虚拟快照
docker的4种网络模式:
- host模式,使用--net=host指定
- container模式,使用--net =container:NAME_or_ID指定
- none模式:使用--net=none指定。
- bridge模式,使用--net=bridge指定,默认是bridge模式
默认选择bridge的情况下,容器启动会通过DHCP获取一个地址,这可能不是我们想要的,在centos7系统上,docker环境下可以使用pipwork脚本对容器分配固定IP(这个IP可以是和物理机同网段的IP)
注:docker默认是bridge(--net= bridge)模式,相当于VMware中的NAT模式,如果没有的话,从官网下载:RPM resource bridge-utils(x86-64) (rpmfind.net)
rpm -ivh /mnt/Packages/bridge-utils-1.5-9.el7.x86_64.rpm
docker环境下可以使用pipework脚本对容器分配固定IP,相当于VMware中桥接模式。
注:pipework有个缺陷,容器重启后IP设置会自动消失,需要重新设置。
配置桥接网络
桥接本地物理网络的目的,是为了局域网内用户方便访问docker实例中服务,不需要各种端口映射即可访问服务。但是这样做,又违背了docker容器的安全隔离的原则,工作中辩证的选择。
安装桥设备:br0
rpm -ivh /mnt/Packages/bridge-utils-1.5-9.el7.x86_64.rpm
把en33绑到br0桥设备上
cd /etc/sysconfig/network-scripts
cp ifcfg-enss /opt/
vim ifcfg-en33
把Ip的相关信息删掉,然后加一行:BRIDGE="br0"
vim ifcfg-br0
# 在文件中写一下的内容
DEVICE="br0"
NM_CONTROLLED="yes"
ONBOOT="yes"
TYPE="Bridge"
BOOTPROTO=none
IPADDR=192.168.1.63 # 改成你本机网卡的地址,不一定是192,可能是17的
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
DNS1=114.114.114.114
# 最后重启Network(有的系统用:service NetworkManager restart)
service network restart
# 测试br0
ping www.baidu.com
下载pipework包
方法1:直接下载pipework zip包
https://github.com/jpetazzo/pipework
unzip pipework-masetr.zip
cd pipework-master
vim pipework # 可以查看里边的内容
cp pipework /usr/local/bin # 方便后期使用pipework命令
到此,pipework已经安装成功d
启动docker;
systemctl start docker
# 把centos-latest-docker-image.tar 镜像上传linux上,并导入docker平台
docker load -i centos-latest-docker-image.tar
使用静态IP启动一个docker实例
例:以none模式,使用--net=none, 启动一个容器,并且开启docker特权模式。(为什么要有特权模式?因为如果没有的话,就不会有mount的模式)
docker run -itd --net=none --privileged=true centos bash
在docker0.6版本以后,privileged被引入docker,使用该参数,container内的root拥有真正的root权限。否则,container内的root只是外部物理机的一个普通用户权限。
使用provileged启动的容器,可以看到很多host上的设备,并且可以执行mount,甚至允许你在docker容器中启动docker容器。不启用privileged,容器中root用户不能执行mount。
docker run -it --pricileged cenots bash
接着给容器配置静态IP地址:
可以看到容器启动的ID.
给此容器配置地址:
pipework语法: pipework 网桥名 容器实例ID 分配给容器的IP/掩码@网关
pipework br0 ************* 192.168.1.71/24@192.168.1.1
# 可以查看容器的详细信息
docker inspect 容器ID
进入容器,测试网络:
docker exec -it 容器ID /bin/bash # 进入容器
cat /etc/resolv.conf
# 你可以安装ifconfig命令
yum install -y net-tools
实战1:使用静态IP启动的docker实例运行,一个web服务器
/usr/sbin/httpd-DFOREGROUND& # 直接运行httpd命令
netstart-antup | grep 80 # 发现80端口已经监听
cd /var/www/html
echo aaaaaa> index.html
扩展:非正常方法关闭docker实例
docker inspect 容器ID | grep Pid # 查看docker的id
kill -9 pid # 找到docker的pid,直接kill掉,也可以关闭docker
总结:
- 创建一个br0桥接设备
- 下载pipework包并安装
- 安装并运行docker
- 导入centos docker镜像
- 启动一个docker实例,注意加参数:--net=none --privileged=true
- 使用pipework给docker实例配置IP