Docker 网络实战:构建可靠的微服务通信架构(基础篇)
摘要
在基于 Docker 构建微服务架构时,网络配置在确保服务间高效、稳定通信中起着核心作用。bridge 是容器启动时默认采用的网络模式,适用于大多数独立容器之间的通信场景,在学习 Kubernetes 网络之前,我们必须要先对 Docker 网络有所理解才行。这篇文章带你一步步看懂 Docker 默认的 Bridge 网络是如何工作的,合理选择网络模式,是构建稳定、安全、可维护的 Docker 微服务系统的重要前提。
在学习 Kubernetes 网络之前,我们必须要先对 Docker 网络有所理解才行。这篇文章带你一步步看懂 Docker 默认的 Bridge 网络是如何工作的,一看就懂、简单明了。
环境说明
我使用的环境:
- Kubernetes 集群:1个master节点 和 2个worker节点
- Calico 网络插件
- Docker 作为容器运行时
如果你只想了解Docker 网络,不用搭建 K8s,只安装 Docker 就足够。
一、环境准备:安装前后对比网络状态
1.1 安装 Docker 前
先查看本机原本的网络接口,方便后面对比变化:
bash
ip a

正常只会看到 lo、ens33 这类系统自带网卡。
1.2 安装 Docker 后
安装完成后,再次执行:
bash
ip a s
你会发现多了一个 docker0,这就是 Docker 默认的网桥。

1.3 查看 Docker 自带网络
Docker 安装好后,会自动创建三种网络:
bash
docker network ls
- bridge:默认网络
- host:共享主机网络
- null:无网络

安装 docker 之后这三种驱动就会创建出三个不同类型的网络。其中 bridge 是默认网络,创建容器时如果没有明确指定,都会自动加入这个网络
二、默认 Bridge 网络详解
2.1 查看默认网桥信息
bash
docker network inspect bridge

这里说明当前容器内容是空。
主要关注这三项:
- 子网(Subnet)
- 网关(Gateway)
- 容器列表(Containers)
2.2 创建容器,观察网络变化
开两个终端:
终端 1:创建第一个容器
bash
docker run -it --name alpine0 --rm alpine sh
终端 2:查看网络变化
bash
ip a docker network inspect bridge
这时的结果与之前有所不同,
- 多了一个
veth开头的虚拟网卡 - bridge 里出现了 alpine0 容器信息
2.3 看懂 veth pair(虚拟网线)
多出来的 vethxxx@ifx 是一对虚拟网卡,像一根网线的两端:
- 一端在宿主机
- 一端在容器里
它们是成对出现、互相连通的。
2.4 连通性测试
(1)容器访问外网
bash
ping baidu.com
默认 bridge 可以访问外网。
(2)宿主机访问容器
bash
ping 容器IP
可以通。
(3)容器之间互相访问
再开一个终端,启动第二个容器:
bash
docker run -it --name alpine1 --rm alpine sh
用 IP ping 可以通,用容器名 ping 不通。这就是因为 bridge 不支持 DNS 解析。
2.5 端口映射(外部访问容器)
bash
docker run -d --name nginx-test -p 8080:80 nginx
访问:
plaintext
http://宿主机IP:8080你自己的http://宿主机IP:8080
就能看到 Nginx 页面。
更多推荐

所有评论(0)