配置docker静态IP地址
1.1 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设置会自动消失,需要重新设置
1.2 配置桥接网络
桥接本地物理网络地目的是为了局域网内用户方便访问docker实例中的服务,不需要各种端口映射即可访问服务。但是这样做,又违背了docker容器的安全隔离的原则。
- 安装软件包
yum install bridge-utils
- 创建桥设备br0
把eth0绑到br0桥设备上:
[root@docker ~]# cd /etc/sysconfig/network-scripts/
[root@docker network-scripts]# cp ifcfg-eth0 /opt/ #备份一下eth0
[root@docker network-scripts]# vim ifcfg-eth0 #编辑配置文件为以下内容
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=eth0
DEVICE=eth0
ONBOOT=yes
BRIDGE="br0 #在文件最后插入这一行,表示把eth0桥接到br0上
- 生成桥设备br0的配置文件:
[root@client network-scripts]# cat ifcfg-br0
DEVICE="br0"
NM_CONTROLLED="yes"
ONBOOT="yes"
TYPE="Bridge"
BOOTPROTO=none
IPADDR=192.168.31.10
NETMASK=255.255.255.0
GATEWAY=192.168.31.2
DNS1=192.168.31.2
[root@client network-scripts]#
[root@client network-scripts]# systemctl restart network
- 测试br0:
[root@client ~]# ip addr|grep br0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master br0 state UP group default qlen 1000
23: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
inet 192.168.31.10/24 brd 192.168.31.255 scope global br0
[root@client ~]#
[root@client ~]# ping g.cn
PING g.cn (203.208.40.98) 56(84) bytes of data.
64 bytes from 203.208.40.98 (203.208.40.98): icmp_seq=1 ttl=128 time=36.5 ms
64 bytes from 203.208.40.98 (203.208.40.98): icmp_seq=2 ttl=128 time=36.1 ms
^C
1.3 使用pipework配置静态IP
直接下载pipework zip包
https://github.com/jpetazzo/pipework
把pipework-master.zip上传到Linux中
将 pipework-master.zip上传服务器上:
[root@docker ~]# unzip pipework-master.zip # 不需要编译,因为pipework 是一个shell脚本
查看:
[root@docker ~]# more ./pipework-master/pipework
[root@docker ~]# cp /root/pipework-master/pipework /usr/local/bin/ #方便后期使用pipework命令
到此 pipework已经安装成功
实战1: 使用静态IP启动的docker实例运行一个web服务器
[root@client ~]# docker run -itd --name www centos bash
c77ff47c7aa37329c908651de459a97bd79ef806b9d2b038a326dcf0ab365c28
[root@client ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c77ff47c7aa3 centos "bash" 12 seconds ago Up 12 seconds www
给此容器配置地址
pipework语法:pipework 网桥名 容器实例ID 分配给容器的IP/掩码@网关
[root@client ~]# pipework br0 c77ff47c7aa3 192.168.31.100/24@192.168.31.2
[root@client ~]#
注:容器的DNS地址,会直接使用物理机的dns
[root@client ~]# ping 192.168.31.100 #可以看到docker实例的IP已经可以使用
PING 192.168.31.100 (192.168.31.100) 56(84) bytes of data.
64 bytes from 192.168.31.100: icmp_seq=1 ttl=64 time=0.107 ms
64 bytes from 192.168.31.100: icmp_seq=2 ttl=64 time=0.087 ms
进入容器,测试网络
[root@client ~]# docker exec -it c77ff47c7aa3 /bin/bash
[root@c77ff47c7aa3 /]# yum install net-tools -y
[root@c77ff47c7aa3 /]# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 172.17.0.2 netmask 255.255.0.0 broadcast 172.17.255.255
ether 02:42:ac:11:00:02 txqueuelen 0 (Ethernet)
RX packets 8 bytes 656 (656.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
eth1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.31.100 netmask 255.255.255.0 broadcast 192.168.31.255
ether 3a:1a:6f:1a:65:3f txqueuelen 1000 (Ethernet)
RX packets 9052 bytes 18685078 (17.8 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 5008 bytes 275878 (269.4 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
到此,docker实例配置静态IP成功。
运行web服务器
[root@c77ff47c7aa3 /]# yum install httpd -y
[root@c77ff47c7aa3 /]# /usr/sbin/httpd -DFOREGROUND &
[root@c77ff47c7aa3 /]# netstat -lntup|grep 80
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 108/httpd
[root@c77ff47c7aa3 /]# echo "www" >/var/www/html/index.html
浏览器访问:http://192.168.31.100
[root@c77ff47c7aa3 /]# curl http://192.168.31.100/
www
[root@c77ff47c7aa3 /]# curl http://192.168.31.100/
www
[root@c77ff47c7aa3 /]#
文档更新时间: 2021-11-09 10:24 作者:xtyang