理解Docker
三个网络

- lo 本地回环地址
- etho 内网地址
- docker0 docker地址
| 问题:docker 是如何处理容器网络访问的 |
| |
| docker run -d -P --name tomcat01 tomcat |
| |
| |
| # 查看容器的内部网络地址 ,发现容器运行的时候会得到一个 **eth0@if262** ip地址,docker分配的 |
| docker exec -it tomcat01 ip addr |
| |
| # Linux 可以 ping 通 docker 容器内部 |
| ping ip地址 |
原理docker0
- 我们每启动一个docker容器,docker就会给docker容器分配一个ip,只要安装了docker,就会有一个网卡docker0
- 桥接模式,使用的技术是evth-pair技术。
- 再次测试ip addr
- 再启动一个容器,发现又多了一对网卡
| # 我们发现这个容器带来网卡,都是一对一对的 |
| # evth-pair 就是一对的虚拟设备,他们都是成对出的,一端连着协议,一段彼此相连 |
| # 正因为这个特性, evth-pair 充当一个桥梁,连接着各种虚拟网络设备的 |
- 容器和容器之间是可以互相ping通的
- docker01 ping docker02

结论:tomcat01 和 tomcat02 是公用的一个路由器,docker0
所有的容器不指定网络的情况下,都是 docker0 路由的,docker会给我们的容器分配一个默认的可用IP
- docker使用的是Linux的桥接,宿主机中是一个Docker容器的网桥docker0

- Docker中的所有的网络接口都是虚拟的,虚拟的转发效率高
- 只要删除容器,对应的网桥一对就没了
--link
| # error |
| docker exec -it tomcat02 ping tomcat01 |
| |
| # 解决,通过 --link 即可以解决了网络联通问题 |
| docker run -d -P --name tomcat03 --link tomcat02 tomcat |
| |
| # success |
| docker exec -it tomcat03 ping tomcat02 |
| |
| # 但是反向不可以ping |
| docker exec -it tomcat02 ping tomcat03 |
- 本质探究
--link就是在hosts配置中增加了一个172.18.0.3 tomcat02 312857784cd4
建议使用自定义网络
自定义网络
查看所有的docker网络

网络模式
- bridge: 桥接(docker)
- none:不配置网络
host:和宿主机共享网络
测试
| # 我们直接启动多个命令 --net bridge ,而这个就是我们的docker0 |
| docker run -d -P --name tomcat01 tomcat |
| docker run -d -P --name tomcat01 --net bridge tomcat |
| |
| # docker特点。默认,域名不能访问,--link可以打通连接 |
| |
| # 自定义网络 |
| --driver bridge |
| --subnet 192.168.0.0/16 192.168.0.2 192.168.255.255 |
| --gateway 192.168.0.1 |
| docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet |
| |
| # 查看 |
| docker network ls |
| |
| docker network inspect mynet |


| # 在自己的网络中启动 tomcat-net-01 , tomcat-net-02 |
| docker run -d -P --name tomcat-net-01 --net mynet tomcat |
| docker run -d -P --name tomcat-net-02 --net mynet tomcat |
| |
| # 可以互相ping |
- 自定义wangluodocker都已经帮我们维护好了对应的关系,推荐使用
- 好处:
- redis-不同的集群使用不同的网络,保证集群是安全和健康的
- mysql-不同的集群使用不同的网络,保证集群是安全和健康的
网络连通

| # 测试打通 tomcat01 - mynet |
| docker network connect mynet tomcat01 |
| network inspect mynet |
| |
| # 联通之后就是将t omcat01 放到了 mynet 网络下 |
| # 一个容器两个ip地址 |
| # 例如:阿里云服务-公网ip,斯旺4ip |
| |
| # succes |
| docker exec -it tomcat01 ping tomcat-net-01 |
| |
| # serror |
| docker exec -it tomcat01 ping tomcat-net-02 |
- 结论
假设要跨网络操作别人,就需要使用 docker network connect 联通。
实战:部署Redis集群

| # 创建网卡 |
| docker network create redis --subnet 172.38.0.0/16 |
| |
| # 查看 |
| docker network ls |
| docker network inspect redis |
- 创建集群


| # 查看 |
| docker exec -it redis-1 /bin/sh |
| ls |
| |
| redis-cli --cluster create 172.28.0.11:6379 172.28.0.12:6379 172.28.0.13:6379 172.28.0.14:6379 172.28.0.15:6379 172.28.0.16:6379 --cluster-replicas 1 |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!