Docker 网络简介
Docker 网络简介
在基础部分,我们提到将在接下来的章节中为应用添加数据库。我们将以容器的形式添加数据库,应用程序将通过 Docker 网络连接到该数据库。
因此,了解一些 Docker 网络的基本知识非常重要,这样在将来遇到问题时能够进行排查和解决。
网络基础
网络本质上是一个允许特定人员在定义好的权限和协议下与其他设备通信的区域。
我们不会深入探讨网络技术,仅介绍与 Docker 相关的一些关键命令和概念。
网络术语与命令
网络中使用了一些常见术语,其中包含:
-
主机名(Hostname):这是最常用的术语,用于在网络中标识一台机器的名称。
-
ping:
ping <主机名>/<IP>命令用于检测从当前运行命令的机器到目标机器的连通性。 -
子网(Subnet):它是网络中的一个独立隔离区域,相当于在同一网络内部划分出特定边界。
-
DNS:类似于电话簿。所有可访问的主机都通过域名服务系统,将主机名与 IP 地址进行映射,从而可以通过名称或 IP 地址访问它们。
-
/etc/hosts:这是一个非常重要的文件,记录了所有可访问主机及其对应的 IP 地址。我们后续会频繁用到这个文件。
Docker 通信
如图所示,我们将容器的 5000 端口映射到宿主机的 5000 端口,因此可以访问容器内运行在 5000 端口上的服务。
对于数据库容器,它将与我们的应用容器处于同一网络中,因此应用容器可以直接访问数据库。
由于数据库容器没有对外暴露接口,因此无法从宿主机直接访问数据库。如果需要,可以额外配置接口来实现宿主机访问。
默认情况下,所有容器都在 Docker 的默认网络空间中运行,因此彼此之间可以相互通信。如果需要,也可以创建网络隔离。
Docker 网络类型
Docker 默认会创建三个网络。
运行以下命令查看:
1$ docker network ls 2NETWORK ID NAME DRIVER SCOPE 3915fe26ffbc8 bridge bridge local 43ac2c0505d62 host host local 5753c94184c7b none null local
在初次安装 Docker 时,系统会自动配置三个名为 none、host 和 bridge 的网络。
其中 none 和 host 网络无法删除,它们是 Docker 网络栈的一部分,但对网络管理员来说并不实用,因为它们没有外部接口可供配置。
管理员可以配置 bridge 网络,也称为 docker0 网络。该网络会自动分配一个 IP 子网和网关。
属于该网络的所有容器都位于同一个子网内,因此容器之间可以通过 IP 地址直接通信。
默认桥接网络的一个缺点是不支持基于 DNS 的容器自动服务发现。因此,若希望默认网络中的容器能够互相通信,必须使用
--link选项手动建立连接。此外,容器间的通信还需要端口转发支持。
我认为这些基础知识已经足够开始学习网络配置了。当我们实际连接容器后,你就会明白之前备注的含义。
现在,让我们继续为应用添加数据库。