一、docker网络通讯
### --- docker网络通讯
~~~ 在通常情况下,Docker使用网桥(Bridge)与NAT的通信模式
~~~ # 注:
~~~ 同容器之间数据交换走的是docker0网桥。
二、同一个网络域空间内数据交换走的是docker0网桥。
### --- 使用访问外部网络:
~~~ 容器想访问外部网络依赖的是防火墙SNAT转换规则;
iptables -t nat -A POSTROUTING -s 172.17.0.0/16 -o docker0 -j MASQUERADE
### --- 外部网络访问容器:
~~~ 外部网络想访问容易依赖的是防火墙DNAT转换规则;
docker run -d -p 80:80 apache
iptables -t nat -A PREROUTING -m addrtype -dst-type LOCAL -j DOCKER
iptables -t nat -A DOCKER ! docker0 -p tcp -m tcp --dport 80 -j DNAT --to-destination 172.17.0.1:80
### --- 运行容器
[root@hub ~]# docker run --name tomcat -d tomcat:v1.0
5f06a55160827b2542da29bab78c922de104066628bf5d3c4455a4ed03184b59
[root@hub ~]# docker inspect tomcat
"Gateway": "172.17.0.1",
"IPAddress": "172.17.0.2",
"IPPrefixLen": 16,
"IPv6Gateway": "",
"GlobalIPv6Ad dress": "",
"GlobalIPv6PrefixLen": 0,
三、docker网络模式修改
### --- docker进程网络修改(进程修改后所有容器全部生效(yuanjian)
~~~ -b --bridge="" 指定docker使用的网络设备,
~~~ 默认情况下docker会自动创建和使用docker0网桥设备,通过此参数可以使用已经存在的设备。
~~~ --bip 指定Docker0的IP和掩码,使用标准的CIDR形式,如 10.10.10.10/24
~~~ --dns 配置容器的DNS,在启动动车客人进程时添加,所有容器全部生效。
### --- docker容器网络修改(容器修改只对指定的容器)
~~~ --dns 用于指定启动的容器的DNS
~~~ --net 用于指定容器的网络通讯方式,有以下四个值
~~~ bridge:动车客人默认方式,网桥模式
~~~ none:容器没有网络栈
~~~ container:使用其它容器的网络栈,docker容器会加入其它容器的network namespace
~~~ host: 表示容器使用host的网络,没有自己独立的网络栈,容器可以安全访问host的网络,不安全
### --- 暴露端口
~~~ -p/P选项的使用格式
~~~ -p: <ContainerPort>将制定的容器端口映射至主机所有地址的一个动态端口
~~~ -p: <HostPort>:<ContainerPort>:映射至制定的主机端口
~~~ -p: <IP>::<ContainerPort>:映射至指定的主机的IP的动态端口
~~~ -p: <IP>:<HostPort>:<containerPort>:映射至制定的主机IP的主机端口
~~~ -p: 大:暴露所需要的的所有端口
### --- docker port ContainerName 可以查看容器当前的映射关系
~~~ 自定义docker0网络的网络地址
~~~ 修改 /etc/docker/daemon.json文件
{
"bip": "192.168.1.60/24",
"fixed-cidr": "10.20.0.0/16",
"fixed-cidr-v6": "2001:db8::/64",
"mtu": "1500",
"default-gateway": "10.20.1.1",
"default-gateway-v6": "2001:db8:abcd::89",
"dns": ["10.20.1.2","10.20.1.3"]
}
### --- 配置真实的网桥,该网桥具有与外界通信的能力。docker0只具备让容器互相通信的能力。
~~~ Linux桥接器进行主机间通讯
[root@hub network-scripts]# vim ifcfg-enp0s3
DEVICE=enp0s3
TYPE=Ethernet
UUID=4cb4b575-c61e-423b-91a5-fa323ebeb452
ONBOOT=yes
BRIDGE=br0 //正常添加这一行即可,删除原有的ip信息
BOOTPROTO=static
DEFROUTE=yes
NAME=enp0s3
[root@hub network-scripts]# vim ifcfg-br0
DEVICE=br0
TYPE=Bridge
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.1.55
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
DNS1=114.114.114.114
DNS2=8.8.8.8
Walter Savage Landor:strove with none,for none was worth my strife.Nature I loved and, next to Nature, Art:I warm'd both hands before the fire of life.It sinks, and I am ready to depart
——W.S.Landor