最近使用 docker 部署自己的项目,涉及到一些网络知识,因此记录下来,防止遗忘。

Docker 网络模式共有 5 种:nonehostbridgeoverlaymacvlan,其中 overlaymacvlan 目前暂时用得少,因此不做记录。

none

即默认不联网的模式,此模式可用于一些对安全性、保密性要求较高的服务,如密钥生成服务。

host

与当前主机共享网络空间,即在此模式下的服务与宿主机上的应用在同一个网段下。 使用此模式时,端口映射参数无效,即 -p,--publish,-P,--publish-all 等参数均无效。 使用此模式,由于容器端口全部都暴露在宿主机上,因此容易造成端口冲突。 注意:此网络模型目前仅支持 Linux 系统。

bridge

通过设置 bridge,可创建不同的网段,让各容器处在不同的网段中,从而达到网络隔离的效果。 新创建的容器,若不指定 bridge,则默认使用 docker0 这个 bridge。

对于 bridge 中的容器,由于容器 ip 默认由 docker 指定,因此各容器的 ip 地址不定。故实现容器间通信,有如下三种方法:

通过宿主机

使用 expose 命令,将端口暴露到宿主机中,然后请求暴露在宿主机上的端口。

通过 link 命令,可以让容器之间通过容器名单向通信。 该命令 docker 官方不建议使用

指定 IP 地址

给每个容器指定 ip 地址,访问时使用 ip 地址来访问。 可实现容器之间的通信,但可读性较差。

使用容器名

使用容器名来访问容器,docker 会解析容器名,转换为对应的 ip。这样较为灵活、可读性强。

参考资料

https://www.cnblogs.com/shenh/p/9714547.html

https://docs.docker.com/network/host/

https://blog.csdn.net/foreverhuylee/article/details/44966109