宿主机默认的网络情况
启动docker后查看网卡信息
会产生一个名为docker0的虚拟网桥
network命令
docker network ls
查看本地配置的network,默认是下面几个 bridge host bridge 默认是bridge,还有一种是自定义的
docker network inpect bridge可以查看该网络段配置的容器以及网段ip地址
docker network creat [networkName]
创建一个新的network网络
docker network creat --driver host [networkName]
指定driver模式创建,默认是bridge,当然了默认只能存在一个host本地网络
docker network rm [networkName]
删除本地的network
network可以做到一下几点:
容器间的互相通信以及端口映射
容器ip变动的时候可以通过服务名直接网络通信而不受到影响
network网络模式
bridge模式:使用--network bridge指定,默认使用docker0
bridge 为每一个容器分配、设置ip等,并将容器链接到一个docker0 虚拟网桥,默认为该模式
host 容器将不会虚拟出自己的网卡,配置自己的ip等,而是使用宿主机的ip和端口host模式: 使用--network host指定
none 容器有独立的network namespace 但并没有对其进行任何网络设置,如分配veth pair 和网桥链接ip 等,在none模式下,并不为Docker容器进行任何网络配置。
也就是说,这个Docker容器没有网卡、IP、路由等信息,只有一个lo需要我们自己为Docker容器添加网卡、配置IP等。
none模式 : 使用--network none指定
container 新常见的容器不会创建自己的网卡和配置自己的ip 而是和一个指定的容器共享ip 端口范围等container模式,
新建的容器和已经存在的一个容器共享一个网络ip配置而不是和宿主机共享,使用--network container:NAME或者容器id指定
docker run -d -p 8083:8080 --network host --name tomcat billygoo/tomcat8-jdk8
docker-compose里创建指定使用的network
使用存在的网络,已经创建好的
networks:
default:
external:
name: es-cluster
加入下面的外部网络声明
networks:
es-cluster:
external: true
使用创建好的network
networks:
- es-cluster
network自定义网络配置
before 案例:
docker run -d -p 8081:8080 --name tomcat81 billygoo/tomcat8-jdk8
docker run -d -p 8082:8080 --name tomcat82 billygoo/tomcat8-jdk8
上述成功启动并用docker exec进入各自容器实例内部,看一下 使用ip能否ping通 使用服务名 是否可以ping通
通过服务名是ping不通的
自定义桥接网络,自定义网络默认使用的是桥接网络bridge
docker run -d -p 8081:8080 --network yuki_dockernetwork --name tomcat81 billygoo/tomcat8-jdk8
docker run -d -p 8082:8080 --network yuki_dockernetwork --name tomcat82 billygoo/tomcat8-jdk8
自定义网络本身就维护好了主机名和ip的对应关系 所以ip 和域名都能通