测试网络连接镜像:alpine
docker pull alpine :拉取测试网络连接镜像
docker run -dit --name cm01 alpine:创建并运行容器
docker exec -it cm01 ash :进入容器
ip shou add:查看ip网卡
route -n :查看路由
docker 网络容器的默认通信方式:veth-pair linnux+bridge 虚拟以太网配对网卡
docker 去往外界通信使用NAPT规则
外界访问docker使用DNAT规则
加入自定义网络的容器才可以通过容器名相互访问,Docker的 网络操作命令如下:
1.创建一个网络:docker network create -d bridge --gateway 192.168.1.0/24 --gateway 192.168.1.1 网络名
(默认创建网络类型为bridge ,常用 --gateway --subnet)
创建容器时也可添加对应网络 :
docker run -d --name cm02 --network net01 alpine
2.查看所有网络:docker network ls
docker支持多种网络类型:
(1)bridge network:容器通过bridge 方式进行网络桥接,通过NAT方式网络访问
(1.1)默认使用linux-bridge网桥,承载容器数据交换
(1.2) 在宿主机部署虚拟网卡,作为对应网络网关
(1.3)容器访问外部网络时,可以通过宿主机的iptables/路由表进行转换转发
(1.4)在该网络内的所有容器都有一个单独地址,属于bridge network子网内
(1.5)bridge network 内的容器和外界通信必须使用nat转换,每个包需查表,重新数据封装,查表效率低
(2)host network :容器和宿主机之间使用共享命名空间,网卡共享给容器使用;容器直接使用宿主机地址来提供服务,高速转发。
(3)none network:完全内部容器,并不创建独立命名空间网卡,只单独创建环回网卡
例:docker run -dit --name cm05 --network none alpine:latest
(4)container network:容器和容器之间共享命名空间(即一个服务有多个容器,多个容器是一个地址(k8s pod))
例:docker run -dit --name cm06 --network container:cm01 alpine:latest
(5)vxlan cluster network :多节点(后续再补充)
3.使指定容器连接加入某网络:docker network connect 网络名 容器名
4.查看网络详细信息:docker network inspect 网络名
brctl show
brctl showmacs 网络名
5.使指定容器连接离开某网络:docker network disconnect 网络名 容器名
6.删除指定网络:docker network rm 网络名
7.清除未使用的网络:docker network prune
【注1】在不通linux-bridge 和 docker network之间,默认网络隔离;
【注2】单独创建新的network可以支持容器主机名访问及ip地址解析;
【注3】iptables -t nat -L 路由规则转换表状态
brctl show 网络信息
ip add show 网卡信息
ip routing table 路由表
netstat -nr 路由表
netstat -nltp 端口状态