Docker网络模式
查看容器的详细信息(可以查看网络类型Networks)
docker container inspect 容器ID
[root@controller ~]# docker network ls
NAME DRIVER SCOPE
bridge bridge local
host host local
none null local
-
bridge(桥接式网络)(默认)
启动容器时,首先会在主机上创建一个docker0的虚拟网桥,相当于交换机,同时自动分配一对网卡设备,一半在容器(eth0),一半在宿主机,并且还关联到了docker0,从而进行连接。
每创建一个容器启动时自动分配地址以后会生成iptables规则,iptables -t nat -vnL 查看
postrouting ,从任何接口进来,只要不从docker0跳出去,源地址任何网络地址,无论到达任何主机,都要做地址伪装,自动选择主机物理源地址
iptables -t nat -vnL|grep docker
Chain POSTROUTING (policy ACCEPT 156 packets, 9745 bytes)
pkts bytes target prot opt in out source destination
30 1886 MASQUERADE all -- * !docker0 172.17.0.0/16 0.0.0.0/0
查看方法:
[root@controller ~]# brctl show
bridge name bridge id STP enabled interfaces
brq4f42285e-8b 8000.000c29e8da73 no eth0
tap87373210-e1
docker0 8000.024233cedda5 no veth1fc99ac
可以看到和本地连接
软件包:
yum install bridge-utils -y
Container(K8S会常用)
- 与另一个运行得容器共用一个网络Network Namespace
--network=container:容器ID
例子:
默认先起一个容器:
docker run -d phpwind:v1
随便启一个容器共用phpwind:v1的网络
docker run -it --network container:2735c9b78546 nginx
这时nginx容器和phpwind的ip都是相同的 ,同样谁先占用80端口就是谁的
##查看网络类型
docker inspect nginx容器ID |grep -i network
NetworkMode
-
host (主机)
- 与宿主机共用一个网络
--network=host
例子:(使用后不需要做端口映射)
性能最高,端口谁先占用就是谁的
docker run --network=host -d phpwind:v1
-
none (空)
- 不为容器配置任何网络功能
--network=none
不使用任何网络类型
例子:
docker run --network=none -d phpwind:v1 /bin/bash
没有网络适合联系使用,只有基础命令