docker的网络
Docker支持五种网络模式
- bridge
默认网络,Docker启动后创建一个docker0网桥,默认创建的容器也是添加到这个网桥中;IP地址段是172.17.0.1/16
host 容器不会获得一个独立的network namespace,而是与宿主机共用一个。 3)none 获取独立的network
namespace,但不为容器进行任何网络配置。 container 与指定的容器使用同一个network
namespace,网卡配置也都是相同的。 自定义 自定义网桥,默认与bridge网络一样。
#其中bridge(桥接模式)、host、none这三中网络为比较常用的。
[root@localhost ~]# iptables -t nat -L
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
DOCKER all -- anywhere anywhere ADDRTYPE match dst-type LOCAL
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
DOCKER all -- anywhere !loopback/8 ADDRTYPE match dst-type LOCAL
Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
MASQUERADE all -- 172.17.0.0/16 anywhere
Chain DOCKER (2 references)
target prot opt source destination
RETURN all -- anywhere anywhere
#其中可以看到docker的默认网络模式
1、查看docker中的默认网络
[root@localhost ~]# docker network ls
NETWORK ID NAME DRIVER SCOPE
924f97138097 bridge bridge local
c2e11b4773fd host host local
b74eb4469d12 none null local
2、创建一个新的docker网络
docker network create -d 网络类型 test
3、使用网络创建一个容器、
docker run -itd --network test --name network 镜像名
pipework进行IP指定
git clone https://github.com/jpetazzo/pipework.git
cp pipework/pipework /usr/local/bin/
docker run -itd --net=none --name test01 centos:7
pipework br0 test01 192.168.1.88/24@192.168.1.1
#192.168.1.88为IP、/24指定子网掩码、192.168.1.1指定网关
docker中配置dns进行通信
-h HOSTNAME或者--hostname=HOSTNAME设定容器的主机名,它会被写到容器内的 /etc/hostname和/etc/hosts。但它在容器外部看不到,既不会在docker ps显示,也不会在其他的容器的/etc/hosts看到。--dns=IP_ADDRESS添加 DNS 服务器到容器的/et/resolv.conf中,让容器用这个服务器来 解析所有不在/etc/hosts中的主机名。
--dns-search=DOMAIN设定容器的搜索域,当设定搜索域为.example.com时,在搜索一个名为host的主机时,DNS不仅搜索host,还会搜索host.example.com
docker高级网络配置
docker在安装过后启动时,就会创建一个名为docker0的网卡,这块网卡就向一个交换机,它会在挂载到它的网口之间进行转发。
docker网络常用参数
-b BRIDGE或--bridge=BRIDGE
指定容器挂载的网桥
--bip=CIDR
定制docker0的掩码
-H SOCKET...或--host=SOCKET...
Docker服务端接收命令的通道
--icc=true|false
是否支持容器之间进行通信
--ip-forward=true|false
请看下文容器之间的通信
--iptables=true|false
是否允许Docker添加iptables规则
--mtu=BYTES容器网络中的MTU
下面2个命令选项既可以在启动服务时指定,也可以在启动容器时指定。在Docker服务启动 的时候指定则会成为默认值,后面执行docker run时可以覆盖设置的默认值。
--dns=IP_ADDRESS...
使用指定的DNS服务器
--dns-search=DOMAIN...
指定DNS搜索域
最后这些选项只有在docker run执行时使用,因为它是针对容器的特性内容。
-h HOSTNAME或--hostname=HOSTNAME
配置容器主机名
--link=CONTAINER_NAME:ALIAS
添加到另一个容器的连接
--net=bridge|none|container:NAME_or_ID|host
配置容器的桥接模式
-p SPEC或--publish=SPEC
映射容器端口到宿主主机
-P or --publish-all=true|false
映射容器所有端口到宿主主机
1、容器要想访问外部网络就需要开启linux内核转发功能。
[root@localhost ~]# sysctl -w net.ipv4.ip_forward=1
net.ipv4.ip_forward = 1
想要长期开启就要写入sysctl.conf这个文件中
如果docker服务在启动时就指定了--ip-forward=true,网络转发功能就会自动打开。