目录
Docker原生网络
docker安装后会自动创建3种网络:bridge、host、none
查看docker默认三种网络
docker network ls
docker安装时会创建一个名为 docker0 的Linux bridge,新建的容器会自动桥接到这个接口
查看docker0 ip
ip addr show docker0
bridge模式
下载网桥工具
yum install bridge-utils.x86_64 -y
运行nginx镜像
docker run -d nginx
下图可以看到新建的容器自动桥接到docker0这个端口
brctl show
host网络模式
host模式可以让容器共享宿主机网络栈,这样的好处是外部主机与容器直接通信,但是容器的网络缺少隔离性
host网络模式需要在容器创建时指定 --network=host
docker run -it --rm --name vm1 --network host busybox
ping 220.181.38.148 #ping一下百度的ip
none模式
none模式是指禁用网络功能,只有lo接口,在容器创建时使用
ip addr
可以看到只有一个回环接口的ip
Docker自定义网络
bridge模式
同一网桥的不同容器
建议使用自定义的网络来控制哪些容器可以相互通信,还可以自动DNS解析容器名称到IP地址
创建一个网桥mynet --subnet自定义网段 --gateway自定义网关
docker network create --subnet 172.20.21.0/24 --gateway 172.20.21.1 mynet
查看docker网络
docker network ls
查看网桥
brctl show
可以看到新加入了一个bridge mynet
使用–ip参数可以指定容器ip地址,但必须是在自定义网桥上,默认的bridge模式不支持,同一网桥上的容器是可以互通的
运行镜像nginx在容器demo 使用自定义网桥mynet ip设定为172.20.21.10 -d是打入后台
运行busybox进入容器 使用自定义网桥mynet
docker run -d --name demo --network mynet --ip 172.20.21.10 nginx
docker run -it --rm --network mynet busybox
使用如下命令可以看出使用自己创建的网桥 自带DNS服务
ping demo
不同网桥的容器
那么如何使两个不同网桥的容器通信呢?
使用 docker network connect命令为demo容器添加一块mynet1的网卡
首先创建网卡mynet1,网段为172.10.21.0/24
docker network create --subnet 172.10.21.0/24 --gateway 172.10.21.1 mynet1
运行busybox在demo容器 网络模式为网桥mynet ip为172.20.21.10
docker run -it --rm --name demo --network mynet --ip 172.20.21.10 busybox
ctrl+p+q 打入后台
然后使用 docker network connect命令为demo添加网桥mynet1 --ip 指定ip
docker network connect mynet1 --ip 172.10.21.10 demo
将容器demo运行到前端
docker attach demo
查看ip
ip addr
如下图 可以看到demo有两个ip:172.10.21.10、172.20.21.10
Docker容器通信
容器通信的意思就是 两个容器共用一个ip 可以使用localhost快速互相访问
–network container:容器名
这 里 我 们 使 用 两 个 容 器 , v m 1 容 器 运 行 n g i n x