Docker入门系列–Docker中的网络(七)
1、Linux内核中的NameSpace
namespace | 系统调用参数 | 隔离内核 | 内核版本 |
---|---|---|---|
UTS | CLONE_NEWUTS | 主机名和域名 | 2.6.19 |
IPC | ClONE_NEWIPC | 信号量、休息队列和共享内存 | 2.6.19 |
PID | CLONE_NEWPID | 进程编号 | 2.6.24 |
NetWork | CLONE_NEWNET | 网络设备、网络栈、端口等 | 2.6.29 |
Mount | ClONE_NEWNS | 挂载点(文件系统) | 2.4.19 |
User | CLONE_NEWNS | 用户和用户组 | 3.8 |
2、Docker网络通讯示意图
3、Docker中的防火墙规则
容器访问外部网络
iptables -t net -A POSTROUTING -s 172.17.0.0 -o docker0 -jMASQUERADE
外部网咯访问容器
docker run -d-p 80:80 apache
iptables -t nat -A PREROUTING -maddrtypre --dst-type LOCAL -j DOCKER
iptables -t nat -A DOCKER ! -idocker0 -p tcp -m tcp --dport 80-j DNAT --to-destination 172.17.0.2:80
4、Docker网络的修改
docker进程网络修改
-b, --bridge=" " 指定Docker使用的网桥设备,默认情况下Docker会自动创建和使用docker0网桥设备,通过此参数可以使用已经存在的设备。
–bip 指定docker0的IP和掩码,使用标准的CIDR形式,如 10.10.10.10/24
–dns 配置容器的DNS,在启动Docker进程是添加,多有容器全部生效
Docker容器网络修改
–dns 用于指定启动的容器的DNS
–net 用于指定容器的网络通讯方式,有以下四种:
- bridge:Docker默认方式,网桥模式
- none:容器没有网络战
- container:使用其它容器的网络栈,Docker容器会加入其它容器的network namespace
- host:表示容器使用Host的网络,没有自己独立的网络栈,容器可以完全访问Host的网络,不安全。
5、端口的暴露方式
-p/P选项的使用格式
-p :将制定的容器端口映射至主机所有地址的一个动态端口。
-p ::映射至指定的主机端口
-p ::映射至指定的主机的IP的动态端口
-p :::映射至指定的主机IP的主机端口
-P(大):暴露所需要的所有端口
docker port ContainerName 可以查看容器当前的映射关系
6、网络隔离
-
基础命令说明
docker network ls 查看当前可用的网类型
docker network create -d 类型 网络空间名称
类型分为:overlay network、bridge network -
使用网络名字空间进行隔离代码记录
docker network create -d bridge --subnet “172.26.0.0/16” --gatway"172.26.0.1" my-bridge-network
docker run -d --network=my-bridge-network --name test1 hub.c.163.com/public/centos:6.7-tools
docker run -d --name test2 hub.c.163.com/public/centos:6.7-tools -
使容器配置上独立IP进行通讯
A、配置帧的网桥
[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
HWADDR=00:0C:29:06:A2:35
TYPE=Ethernet
UUID=34b706cc-aa46-4be3-91fc-d1f48c301f23
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=static[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-br0
//改成这样
DEVICE=br0
TYPE=Bridge
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.199.131
NETMASK=255.255.255.0
GATWAY=192.168.199.2
DNS=8.8.8.8
B、使用工具分配地址
[root@localhost ~]# yum -y install git
[root@localhost ~]# git clone https://github.com/jpetazzo/pipework
[root@localhost ~]# cp pipework/pipework/usr/local/bin
[root@localhost ~]# docker run -itd --net=none --name=ff centos-6-x86 bash
[root@localhost ~]# pipework br0 f1 192.168.216.135/24