OVS:Open VSwitch
6种名称空间:
- UTS 主机名和域名
- User 用户的
- Mount 挂载文件系统
- IPC 进程间通信的
- Pid 进程ID
- Net 网络
网络名称空间主要用于实现协议栈和网络设备的隔离
- 桥接
- 主机数量较多的时候,平面过于复杂
- 虚拟网络
- 主机不可见
- Overlay NetWork叠加网络,即采用隧道转发
- sudo docker run --name testbox5 -it --rm busybox:latest
- –rm 退出容器后删除该镜像
- sudo docker run --name testbox5 --network container:testbox4 -it --rm busybox:latest
- –network container:testbox4 表示testbox4和testbox5的网络共享,仅仅是网络共享
/ # echo "hello nginx" > /tmp/index.html / # httpd -h /tmp/ / # netstat -tn
- 采用testbox5也可以访问显示“hello nginx”
- –network container:testbox4 表示testbox4和testbox5的网络共享,仅仅是网络共享
- sudo docker run --name testbox5 --network host -it --rm busybox:latest
- –network host 则表示testbox4和物理主机的网络共享,仅仅是网络共享
- sudo iptables -t nat -vnL
Chain DOCKER (2 references) pkts bytes target prot opt in out source destination 0 0 RETURN all -- docker0 * 0.0.0.0/0 0.0.0.0/0 0 0 DNAT tcp -- !docker0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:32769 to:172.17.0.2:80
- 可以查看容器对外开放的172.17.0.2:80是对应到物理机的哪个端口,从而实现就算是开放很多相同的80端口,不过在物理机上面还是不会出现冲突
- sudo docker port myweb
- 查看myweb容器对应物理主机的哪个端口
- sudo docker kill myweb
- 杀死myweb这个容器
- sudo ip netns list
- 显示所有的虚拟网络命名空间
- sudo ip netns add net1
- 添加一个网络命名空间
- sudo ip netns exec net1 ifconfig
- 进入net1的网络环境执行ifconfig
- sudo ip netns exec net1 ifconfig -a
- 进入net1的网络环境执行ifconfig
- sudo ip link add name veth1.1 type veth peer name veth1.2
- 添加一个连接
- sudo ip link show
- 显示所有连接的情况
- sudo ip link set dev veth1.2 netns net1
- sudo ip netns exec net1 ip link set dev veth1.2 name eth0
- 修改连接的名称
- sudo ifconfig veth1.1 10.1.0.1/24 up
- sudo ip netns exec net1 ifconfig eth0 10.1.0.2/24 up
- 将设备开启起来
- sudo docker run --name testbox3 -it --network bridge --rm busybox:latest
- sudo docker run --name testbox3 -it --network none --rm busybox:latest
- –network none 表示用某种网络来启动该容器
- sudo docker run --name testbox3 -it --network bridge -h testbox3 --rm busybox:latest
- -h testbox3 表示启动前对主机名字进行设置
- 在容器里面运行cat /etc/hosts可以查看
- -h testbox3 表示启动前对主机名字进行设置
- sudo docker run --name testbox3 -it --network bridge -h testbox3 --dns 114.114.114.114 --rm busybox:latest
- –dns 114.114.114.114 表示启动前对DNS进行设置
- 在容器里面运行cat /etc/resolv.conf可以查看
- –dns 114.114.114.114 表示启动前对DNS进行设置
- sudo docker run --name testbox3 -it --network bridge -h testbox3 --dns 114.114.114.114 --dns-search ilinux.io --add-host www.xxx.com:1.1.1.1 --rm busybox:latest
- –add-host www.xxx.com:1.1.1.1 表示在启动前添加主机
- sudo docker run --name myweb -it --network bridge -p 80 --rm nginx:1.14-alpine
- 容器以80端口开启,对应到物理机就是动态的端口
- sudo docker run --name myweb -it --network bridge -p 192.168.0.105::80 --rm nginx:1.14-alpine
- 容器以80端口开启,对应到物理机还是动态的端口,不过物理机就固定是192.168.0.105
- sudo docker run --name myweb -it --network bridge -p 80:80 --rm nginx:1.14-alpine
- 容器以80端口开启,对应到物理机是固定端口80,物理机就没有固定
- sudo docker run --name myweb -it --network bridge -p 192.168.0.105:8080:80 --rm nginx:1.14-alpine
- 容器以80端口开启,对应到物理机是固定端口80,物理机就固定是192.168.0.105