2021-04-24

1)Docker随机分配一个为占用的私有网段中一个地址给docker0接口,比如典型的172.17.42.1,掩码为255.255.255.0
2)启动容器内的网口,也会自动非配给同一网段(172.17.0.0/16)的地址3)创建一对虚拟接口(veth pair),分别放在本地主机和新容器的命名空间中4)一端虚拟接口连(挂载)到默认docker0网桥上,名称呢以veth开头(eg:vethAQI2QT)5)容器虚拟接口eth06)网桥可用地址段获取一个空闲地址分配给容器的eth0(eg:172.17.0.2/16)并配置默认路由网关为docker0网卡的内部接口docker0的IP地址2.手动配置网络用户使用–net=none后,docker将不对容器网络进行配置$ docker run -i -t --rm ==net=none ubuntu:latest /bin/bash1本地主机查找主机进程PID(port ID,容器开放端口)$ docker inspect -f ‘{{.State.Pid}}’ 63f36fc01b5f2778(显示容器PID)12为它创建命名空间$ pid=2778$ sudo mkdir -p /var/run/netns$ sudo ln -s /proc/ p i d / n s / n e t / v a r / r u n / n e t n s / pid/ns/net /var/run/netns/ pid/ns/net/var/run/netns/pid (ln -s创建文件连接)123查看网卡配置$ ip addr show docker0 (检查桥接网卡的ip)1创建一对”veth pair”接口A和B$ sudo ip link add A type veth pair name B(ip link add命令 添加接口A,再veth pair名字为B的接口)12把接口A添加到docker0网桥$ sudo brctl addif docker0 A1开启接口A$ sudo ip link set A up(ip link set 命令是 改变设备启动)12把接口B放在容器网络命名空间,命名为eth0$ sudo ip link set B netns p i d ( B 是 接 口 , n e t n s 将 网 络 虚 化 , pid (B是接口,netns将网络虚化, pid(Bnetnspid即为所指网络空间)(ip netns exec进入后面指的网络空间进行配置,从而再容器中配置)$ sudo ip netns exec p i d i p l i n k s e t d e v B n a m e e t h 0 ( 接 口 B 命 名 ) pid ip link set dev B name eth0 (接口B命名) pidiplinksetdevBnameeth0(B sudp ip netns exec p i d i p l i n k s e t e t h 0 u p ( 启 动 接 口 B ) pid ip link set eth0 up (启动接口B) pidiplinkseteth0up(B sudo ip netns exec p i d i p a d d r a d d 172.17.42.99 / 16 d e v e t h 0 ( d o c k e r 0 上 接 入 e t h 0 端 口 ) pid ip addr add 172.17.42.99/16 dev eth0 (docker0上接入eth0端口) pidipaddradd172.17.42.99/16deveth0(docker0eth0 sudo ip netns exec KaTeX parse error: Expected 'EOF', got '#' at position 164: …@75dbd6685305:/#̲ cat /etc/hosts… sudo sysctl net.ipv4.ip_forwardnet.ipv4.ip_forward = 112若为0,手动打开:$ sudo sysctl -w net.ipv4.ip_forward = 11容器之间的访问:可以通过(docker run)容器运行时参数–link=CONTAINER_NAME:ALIAS命令,来实现容器互联,连接前后可以通过如下命令来监控$ sudo iptables -nL…CHAIN FORWARD (policy ACCEPT)…1234Docker会在iptable中为两个互联容器分别添加一条ACCEPT的规则,允许相互访问开放的端口。5.映射容器端口到宿主主机1)容器访问外部网络:容器访问外部网络源地址肯定不是172.17.0.2,需要进行源地址映射(SourceNAT)映射是通过iptables的源地址伪装操作实现的。查看主机nat表上POSTROUTING链的规则$ sudo iptables -t nat -nvL POSTROUTING1上述规则将所有源地址在172.17.0.0/16网段动态伪装为从系统网卡发出。2)外部容器访问容器实现:可以在docker run通过-p参数来启用以一个开放80端口的web容器举例,使用-P时会自动映射到本地49000-49900范围内注意:1.这里规则映射了0.0.0.0,意味着确实主机来自所有网络接口上的流量2.如果希望永久绑定到某个固定的IP地址,可以在Docker配置文件中 /etc/default/docker中指定DOCKER_OPTS=”–ip=IP_ADDRESS”,之后重启docker服务即可6.自定义网桥$ sudo service docker stop (停止服务)$ sudo ip link set dev docker0 down (关闭网桥)$ sudo brctl delbr docker0 (删除旧的网桥)$ sudo brctl addbr bridge0 (添加网桥)$ sudo ip addr add 192.168.5.1/24 dev bridge0 (网桥ip)$ sudo ip link set dev bridge0 up (开启网桥)$ sudo ip addr show bridge0 (查看网桥ip地址配置)$ sudo service docker start (启动服务)12345678910可以用brctl show查看桥接信息(启动两个容器)$ docker run -i -t --rm --net=none ubuntu:latest /bin/bashroot@1f1f4c1f931a:/#$ docker run -i -t --rm --net=none ubuntu:latest /bin/bashroot@12e343489d2f:/#(找到进程号)$ docker inspect -f ‘{{.State.Pid}}’ 1f1f4c1f931a2989$ docker inspect -f ‘{{.State.Pid}}’ 12e343489d2f(创建网络命名空间)$ sudo mkdir -p /var/run/netns$ sudo ln -s /proc/2989/ns/net /var/run/netns/2989$ sudo ln -s /proc/3004/ns/net /var/run/netns/3004(创建一对pair接口)$ sudo ip link add A type veth peer name B$ sudo ip link set A netns 2989 (接口A接到2989虚拟空间中)$ sudo ip netns exec 2989 ip addr add 10.1.1.1/32 dev A (增加虚拟ip)$ sudo ip netns exec 2989 ip link set A up (开启A接口)$ sudo ip netns exec 2989 ip route add 10.1.1.1/32 dev A (添加到路由)$ sudo ip link set B netns 3004 (接口B接到3004虚拟空间中)$ sudo ip netns exec 3004 ip addr add 10.1.1.1/32 dev B (增加虚拟ip)$ sudo ip netns exec 3004 ip link set B up (开启B接口)$ sudo ip netns exec 3004 ip route add 10.1.1.1/32 dev B (添加到路由)12345678910111213141516171819202122232425几种命令详解:ip link set–改变设备的属性:up/down 起动/关闭设备。$ ip link set dev eth0 up1改变网络设备MTU(最大传输单元)的值。$ ip link set dev eth0 mtu 15001ip link show–显示设备属性ip addr add–添加一个新的协议地址$ ip addr add local 192.168.4.1/28 brd + label eth0:1 dev eth01ip addr show–显示协议地址$ ip addr show eth01.ip route add – 添加新路由设置到网络10.0.0/24的路由经过网关193.233.7.65$ ip route add 10.0.0/24 via 193.233.7.651ip route show – 列出路由

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值