本篇是第七部分“网络篇”的第六篇。在这个部分,我会为你由浅入深的介绍 Docker 网络相关的内容。包括 Docker 网络基础及其实现和内部原理等。上篇,我为你介绍了 Docker 的一个重要组件 docker-proxy 的工作原理,本篇,我们来聊聊 Docker 内部 DNS 的原理。
在之前的内容《容器网络的灵活使用》中,我为你介绍过当使用自定义的 bridge 网络时,Docker 内置的 DNS 会帮助我们实现容器的互联,或者说可以帮我们实现容器名称的解析。
用一个例子来快速的复习一下:
# 创建一个自定义的网络
(MoeLove) ➜ ~ docker network create course
1e0d66c191bf45ac1f74458828ec67c4d3143f604740277b66c1d19a098aeb78
# 启动一个容器,加入该自定义网络,并将容器命名为 redis
(MoeLove) ➜ ~ docker run --name redis --rm -d --network=course redis:alpine
fe8e6485dd053588ee7f501ad41be2c6ca5287f02b940690b9ac6b86314159ea
# 启动另一个容器,并加入该网络,尝试去 ping 之前容器的名字
(MoeLove) ➜ ~ docker run --rm -it --network=course alpine
/ # ping -c 1 redis
PING redis (172.21.0.2): 56 data bytes
64 bytes from 172.21.0.2: seq=0 ttl=64 time=0.554 ms
--- redis ping statistics ---
1 packets transmitted, 1 packets received,