Docker 网络
1.从 docker0 说起
1.1 docker 默认网络
docker 安装后,会自动创建三个网络
> docker network ls
NETWORK ID NAME DRIVER SCOPE
294649f76614 bridge bridge local
092f6fdb1038 host host local
dfa3b84cd918 none null local
docker 默认的网络是 bridge,即桥接网络,默认情况下,docker 启动的容器都会连接到这个网络,我们也可以创建 自定义的网络,然后将容器连接到自定义的网络中。
1.2 容器网络通信
容器之间通信,默认情况下,使用的是 docker0 网络,容器之间可以通过容器名或者容器 id 进行通信。
> docker run -itd --name nginx01 nginx
> docker run -itd --name nginx02 nginx
> docker exec -it nginx01 ping nginx02
> docker exec -it nginx02 ping nginx01
dockers 本质是一个虚拟网桥,可以通过 brctl show 命令查看
注意:brctl 命令需要安装 bridge-utils 包
yum install bridge-utils -y
> brctl show
bridge name bridge id STP enabled interfaces
docker0 8000.0242f7b3f477 no veth4da4974
veth51c1d3d
1.3 docker0 的作用
给容器分配 ip 地址,容器之间可以通过 ip 地址进行通信。 给容器分配 Mac 地址,是每个容器的默认网关
2.自定义网络
2.1 创建自定义网络
> docker network create --driver bridge --subnet 172.18.0.0/16 --gateway 172.18.0.1 mynet
2.2 连接自定义网络
> docker run -itd --name nginx01 --network mynet nginx
> docker run -itd --name nginx02 --network mynet nginx
2.3 容器网络通信
> docker exec -it nginx01 ping nginx02
> docker exec -it nginx02 ping nginx01
3.跨主机通信
3.1 创建自定义网络
> docker network create --driver overlay --attachable mynet
3.2 连接自定义网络
> docker run -itd --name nginx01 --network mynet nginx
> docker run -itd --name nginx02 --network mynet nginx
3.3 容器网络通信
> docker exec -it nginx01 ping nginx02
> docker exec -it nginx02 ping nginx01