docker network
1、是什么
- docker不启动,默认网络情况
- ens33
- lo
- cirbr0
- docker启动后,网络情况
- 多了一个docker0
- 查看docker网络模式命令
- docker network ls
2、常用基本命令
- All命令
- docker network --help
- 查看网络
- docker network ls
- 查看网络源数据
- docker network inspect xxx网络名字
- 删除网络
- docker network rm xxx网络名字
3、能干嘛
- 容器间的互联和通信以及端口映射
- 容器ip变动的时候可以通过服务名直接网络通信而不受影响
4、网络模式
- 总体介绍
|
|
---|---|
|
|
|
|
|
|
|
|
- 容器实例内默认网络IP生产规则
- 说明
- 创建了两个ubuntu容器实例u1、u2
- IP分别是172.17.0.2、172.17.0.3
- 接下来删除u2创建u3
- 此时u3IP为172.17.0.3
- 结论
- docker容器内部的ip是有可能变的
- 案例说明
- bridge
- docker run -d -p 8081:8080 --name tomcat81 tanshao/tomcat8-jdk8
docker run -d -p 8082:8080 --name tomcat82 tanshao/tomcat8-jdk8 - 两两匹配验证
- //在容器外面查看ip
docker inspect 容器名
//在容器内部查看
ip addr - host
- 是什么
- 直接使用宿主机的 IP 地址与外界进行通信,不再需要额外进行NAT 转换。
- 容器将不会获得一个独立的Network Namespace, 而是和宿主机共用一个Network Namespace。容器将不会虚拟出自己的网卡而是使用宿主机的IP和端口。
- 代码
- 警告:docker run -d -p 8083:8080 --network host --name tomcat83 billygoo/tomcat8-jdk8
- 正确:docker run -d --network host --name tomcat83 billygoo/tomcat8-jdk8
- 因为在host模式下,使用客户端ip,指定ip不起作用
- 是什么
- none
- 禁用网络功能,只有lo标识(就是127.0.0.1表示本地回环)
- 案例
- docker run -d -p 8084:8080 --network none --name tomcat84 billygoo/tomcat8-jdk8
- container
- 新建的容器和已经存在的一个容器共享一个网络ip配置而不是和宿主机共享。新创建的容器不会创建自己的网卡,配置自己的IP,而是和一个指定的容器共享IP、端口范围等。同样,两个容器除了网络方面,其他的如文件系统、进程列表等还是隔离的
- 案例
- //错误示例:相当于86、85共用同一个ip端口,导致端口冲突
docker run -d -p 8085:8080 --name tomcat85 billygoo/tomcat8-jdk8
docker run -d -p 8086:8080 --network container:tomcat85 --name tomcat86 billygoo/tomcat8-jdk8
//正确示例:Alpine是一个面向安全的轻型Linux发行版
docker run -it --network --name alpine1 alpine /bin/sh
docker run -it --network container:alpine1 --name alpine2 alpine /bin/sh - 运行结果,验证共用搭桥
- 假如此时关闭alpine1,再看看alpine2
- //错误示例:相当于86、85共用同一个ip端口,导致端口冲突
- 自定义网络
- 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是OK的
- 按照服务名ping结果???
- after
- 案例
- 定义桥接网络,自定义网络默认使用的是桥接网络bridge
- 新建自定义网络
- 新建容器加入上一步新建的自定义网络
- docker run -d -p 8081:8080 --network zzyy_network --name tomcat81 billygoo/tomcat8-jdk8
- docker run -d -p 8082:8080 --network zzyy_network --name tomcat82 billygoo/tomcat8-jdk8
- 互相ping测试
- 问题结论
- 自定义网络本身就维护好了主机名和ip的对应关系(ip和域名都能通)
- 自定义网络本身就维护好了主机名和ip的对应关系(ip和域名都能通)
- 自定义网络本身就维护好了主机名和ip的对应关系(ip和域名都能通)