network namespace: linux内核一项重要功能,用于隔离不同的网络设置
网桥network bridge:linux内核提供的一种链路层设备。Docker利用网桥来实现容器和外界通信
默认情况下,docker服务会在它所在机器上创建一个名为docker0的网桥。
brctl show 列出当前系统的所有network bridge
ifconfig docker0 查看docker0的详细信息
docker network ls 查看docker默认提供的几种网络
bridge: 如果docker启动时,没有显示加入任何网络,那么会默认加入到名为bridge的网络,这个网络就是基于docker0实现的
host:加入host网络的容器,可以实现和docker daemon守护进程也就是docker服务所在的宿主机网络环境进行直接通信
none:容器在启动时不带任何网络设备
docker network inspect bridge
Subnet --这个子段表明bridge网络位于的网段,与ifconfig中docker0的IP地址一致
Containers --- 这个字段表明启动的加入brideg网络的容器
brctl show
docker0的interfaces 字段 表示一对虚拟以太网设备veth pair,一端位于容器里,另外一端位于宿主机上
ip addr show vethexxxxxx
创建网桥:
brctl addbr lab-br0 --创建网桥
brctl show 查看网桥
ifconfig lab-br0 10.15.10.1 netmask 255.255.255.0 指定IP地址
ifconfig lab-br0 查看详细信息
ip netns add lab-ns0 ---创建一个network namespace,模拟一个容器
ip netns list 查看network namespace
ip link add veth0 type veth peer name veth1 --在宿主机上新建两个网络端口veth1@veth0, veth0@veth1
ip link list 查看以太网接口
ip netns exec lab-ns0 ip link list 查看lab-ns0里的ip link
ip link set veth1 netns lab-ns0 把veth1移到lab-ns0里
ip netns exec lab-ns0 ip link list
ip link list
ip netns exec lab-ns0 ip link set veth1 name eth0 把位于lab-ns0里的veth1重新命名为eth0
ip netns exec lab-ns0 ip link list
ip netns exec lab-ns0 ip addr add 10.15.10.2/24 dev eth0 为lab-ns0里的eht0设置ip地址
ip netns exec lab-ns0 ip addr show eth0 ---查看eth0 验证ip地址是否设置成功
brctl addif lab-br0 veth0 --连接veth0 到lab-br0网桥,实现lab-ns0 和宿主机的网络联通
brctl show 查看网桥连接的interfaces
ip netns exec lab-ns0 ip route list 在lab-ns0里执行ip route list 查看静态路由规则
ip route list
ip link set dev veth0 up 启动宿主机的veth0
ip netns exec lab-ns0 ip link set dev eth0 up 启动lab-ns0中的eth0
ip netns exec lab-ns0 ip link set dev lo up 启动lab-ns0里的loopback
ping 10.15.10.2 -c 3 ping lab-ns0 里的eth0
ip netns exec lab-ns0 ping 10.15.10.1 -c 3 从lab-ns0 ping 宿主机的lab-br0
ip netns exec lab-ns0 ping 10.15.10.2 -c 3 从lab-ns0 ping eth0