docker 网络
一、Docker自带的三个网络
Docker安装时会自动在host主机上创建三个网络,可以通过docker network ls命令查看当前默认的三个网络。
查看docker当前的网络:
[aaa@qq.com ~]# docker network ls
1、none网络
none网络就是什么都没有的网络。
挂在这个网络下的容器除了lo回环接口,没有其他任何网卡。
容器创建时,可以通过–network=none指定容器使用none网络。
通过busybox镜像启动一个指定none网络的容器:
[aaa@qq.com ~]# docker run -it --network none busybox
2、host网络
连接到host网络的容器共享Docker host的网路栈,容器的网络配置与host主机完全一样。
可以通过–network=host指定使用host网络。
通过busybox镜像启动一个指定host网络的容器:
[aaa@qq.com ~]# docker run -it --network host busybox
3、bridge网络
查看当前的网桥(虚拟交换机)都有哪些:
[aaa@qq.com ~]# brctl show
bridge name bridge id STP enabled interfaces
docker0 8000.02423e804b5f no
virbr0 8000.5254006dbfe7 yes virbr0-nic
通过busybox镜像启动一个指定bridge网络的容器,然后再次查看当前的网桥信息:
[aaa@qq.com ~]# docker run -dt --network bridge busybox
[aaa@qq.com ~]# brctl show
bridge name bridge id STP enabled interfaces
docker0 8000.02423e804b5f no veth1876355
virbr0 8000.5254006dbfe7 yes virbr0-nic
容器的网络挂在docker0上了
这种网络可以访问外网,但是外网访问不到内网
二、自定义容器网络
除了none,host,bridge这三个自动创建的网络,用户也可以根据业务需要创建user-defined网络。
Docker提供三种user-defined网络驱动:bridge,overlay和macvlan。overlay和macvlan用于创建跨主机的网络。
创建一个指定bridge模式的网络(当然不指定的话,默认就是为bridge模式):
[aaa@qq.com ~]# docker network create --driver bridge my_net1
dfce9ff313a78d2eed1e861443a2168c5895008ade4827b226cd8a7bedac11ca
[aaa@qq.com ~]# docker network ls
NETWORK ID NAME DRIVER SCOPE
9cb85ec8a7b9 bridge bridge local
694de36b4e58 host host local
dfce9ff313a7 my_net1 bridge local
f1a1d1ca6111 none null local
查看当前的网桥信息:
[aaa@qq.com ~]# brctl show
bridge name bridge id STP enabled interfaces
br-dfce9ff313a7 8000.024248124e5f no
docker0 8000.02423e804b5f no veth1876355
veth54a8b07
virbr0 8000.5254006dbfe7 yes virbr0-nic
2.创建一个指定ip网段的容器网络
[aaa@qq.com ~]# docker network create --driver bridge --subnet 172.10.0.0/24 --gateway 172.10.0.1 my_net2
4558fc8e6850e57d3ef18794025be3bd2b94d0f3a98fbadf1b812812d27cf9f3
查看
[aaa@qq.com ~]# docker network ls
NETWORK ID NAME DRIVER SCOPE
9cb85ec8a7b9 bridge bridge local
694de36b4e58 host host local
dfce9ff313a7 my_net1 bridge local
4558fc8e6850 my_net2 bridge local
f1a1d1ca6111 none null local
容器使用新的网络时要指定一下:
[aaa@qq.com ~]# docker run -it --network my_test2 centos:latest bash
[aaa@qq.com /]# ip a
16: aaa@qq.com: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
link/ether 02:42:ac:0a:00:02 brd ff:ff:ff:ff:ff:ff link-netnsid 0
inet 172.10.0.2/24 brd 172.10.0.255 scope global eth0
valid_lft forever preferred_lft forever
指定静态ip:
[aaa@qq.com ~]# docker run -it --network my_test2 --ip 172.10.0.10 centos:latest bash
18: aaa@qq.com: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
link/ether 02:42:ac:0a:00:0a brd ff:ff:ff:ff:ff:ff link-netnsid 0
inet 172.10.0.10/24 brd 172.10.0.255 scope global eth0
valid_lft forever preferred_lft forever
确保开启了路由转发
[aaa@qq.com ~]# sysctl -a |grep ip_forward
net.ipv4.ip_forward = 1
容器访问外部
通过busybox镜像启动一个容器,然后查看与外网的连通性:
[aaa@qq.com ~]# docker run -it busybox
/ # ping baidu.com
PING baidu.com (39.156.69.79): 56 data bytes
64 bytes from 39.156.69.79: seq=0 ttl=127 time=9.112 ms
外网访问容器:
启动一个未指定映射端口的容器在后台运行:
[aaa@qq.com ~]# docker run -d -p 80 httpd
查看docker容器映射的端口:
[aaa@qq.com ~]# docker port 9dcbc538935
80/tcp -> 0.0.0.0:32768
测试浏览器访问容器服务:
访问地址:192.168.2.100:32768
上一篇: android 语音唤醒,录音并识别