docker之虚拟化网络

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”
  • sudo docker run --name testbox5 --network host -it --rm busybox:latest
    • –network host 则表示testbox4和物理主机的网络共享,仅仅是网络共享
  • sudo iptables -t nat -vnL
    • 查看查看本机关于NAT的设置情况

    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可以查看
  • 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可以查看
  • 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

你可能感兴趣的:(docker,docker之道)