CC00014.CloudDocker——|Cloud&Docker网络.V01|——|网络配置|

一、docker网络通讯
### --- docker网络通讯

~~~     在通常情况下,Docker使用网桥(Bridge)与NAT的通信模式
~~~     # 注:
~~~     同容器之间数据交换走的是docker0网桥。
CC00014.CloudDocker——|Cloud&Docker网络.V01|——|网络配置|_第1张图片
二、同一个网络域空间内数据交换走的是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: 将制定的容器端口映射至主机所有地址的一个动态端口
~~~     -p: :映射至制定的主机端口
~~~     -p: :::映射至指定的主机的IP的动态端口
~~~     -p: :映射至制定的主机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

你可能感兴趣的:(网络,docker,java,linux,python)