docker-network认识
前言
微服务使用docker-compose部署,其中一块问题就是docker-network的网络问题
docker network
Docker有五种网络驱动模式
bridge network 模式(网桥):默认的网络模式。类似虚拟机的nat模式
host network 模式(主机):容器与宿主机之间的网络无隔离,即容器直接使用宿主机网络
None network 模式:容器禁用所有网络。
Overlay network 模式(覆盖网络): 利用VXLAN实现的bridge模式
Macvlan network 模式:容器具备Mac地址,使其显示为网络上的物理设备
以上五种网络模式,只有前三种比较有使用到
- 网桥模式:容器与宿主机之间的网络有隔离,请注意,如果有开启防火墙的着这个就有出现网络隔离问题
创建网桥:
docker network create docker1 -o com.docker.network.bridge.name=docker1 -o com.docker.network.bridge.host_binding_ipv4=0.0.0.0 --driver=bridge --subnet=172.20.0.0/16 --gateway=172.20.0.1
docker-compose配置
version: '2'
services:
networks:
bridge01:
ipv4_address: 172.20.0.3 ###容器固定ip
networks:
bridge01: ##自建的网络名称
external: true
使用命令查看
docker network inspect bridge01
- 主机模式:目前感觉这个是比较省心的,但是这种方式的网络安全系数比较低
version: '2'
services:
network_mode: host
docker 只能有一个主机网络,所以不能创建网桥
docker-network基本命令
# 列出所有当前主机上或Swarm集群上的网络
docker network ls
#查看网络详情
docker network inspect network名称
# 清除未使用的docker网络
docker network prune -f
# 创建网络
docker network create -d bridge br0
docker network create –subnet=192.168.50.0/24 br0
docker network create –subnet=192.168.50.0/24 –ip-range=192.168.50.0/24 br0
docker network create –subnet=192.168.10.0/24 –internal br1
#将容器添加进一个已有网络
docker network connect bridge 容器名或ID
docker network connect --ip 172.17.0.18 network名称【必须是自己创建的才可以】 容器名或ID
#查看某一个容器中的网络,可以将一个容器连接到多个网络中。
docker inspect 容器名或ID
docker inspect --format='{{json .NetworkSettings.Networks}}' 容器名或ID
# 获取容器IP
docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' 容器名或ID
#将容器从网络中移除
docker network disconnect bridge 容器名或ID
# 删除一个网络
docker network rm network名称