Docker网络基础知识

2023-04-26 10:16:28 浏览数 (1)

Docker 网络的基础知识

Docker 网络的类型

在 Docker 中,有四种不同类型的网络:

  • bridge:默认网络类型。它会在 Docker 主机上创建一个桥接网络,并为每个容器分配一个 IP 地址。
  • host:容器与 Docker 主机共享网络命名空间。容器将直接使用主机网络接口。
  • overlay:用于跨多个 Docker 主机创建网络。它允许多个 Docker 主机上的容器相互通信。
  • macvlan:用于将容器连接到物理网络。容器将直接分配物理网络接口的 MAC 和 IP 地址。

Docker 网络的基本概念

在 Docker 中,有几个基本概念需要了解:

  • Docker 网络:一个 Docker 网络是一组连接在一起的容器,它们可以相互通信。
  • Docker 网络驱动程序:Docker 网络驱动程序是一种插件机制,它允许 Docker 使用不同的网络技术来创建网络。每个 Docker 网络都关联到一个网络驱动程序。
  • Docker 网络别名:一个 Docker 容器可以有多个网络别名,每个别名都映射到容器的 IP 地址。这使得容器可以使用不同的名称在不同的网络中进行通信。

Docker 网络的管理

Docker 网络可以使用 Docker CLI 或 Docker API 进行管理。下面是一些基本的 Docker 网络管理命令:

  • docker network ls:列出 Docker 中的所有网络。
  • docker network create:创建一个新的 Docker 网络。
  • docker network rm:删除一个 Docker 网络。
  • docker network inspect:显示 Docker 网络的详细信息。
  • docker network connect:将一个容器连接到一个 Docker 网络。
  • docker network disconnect:将一个容器从 Docker 网络中断开连接。

Docker 网络示例

创建 Docker 网络

首先,让我们创建一个新的 Docker 网络:

代码语言:javascript复制
docker network create my-network

这将在 Docker中创建一个名为 my-network 的新网络。

连接容器到 Docker 网络

现在,我们可以将一个容器连接到这个网络。例如,我们可以创建一个名为 web-server 的容器,并将其连接到 my-network 网络:

代码语言:javascript复制
docker run -d --name web-server --network my-network nginx

这将创建一个名为 web-server 的容器,它将运行 Nginx Web 服务器,并连接到 my-network 网络。现在,我们可以使用 Docker CLI 来验证容器是否已连接到正确的网络:

代码语言:javascript复制
docker inspect web-server | grep NetworkMode

这将返回一个类似于以下内容的输出:

代码语言:javascript复制
"NetworkMode": "my-network"

在 Docker 网络中连接容器

现在,我们可以创建另一个容器,并连接到 my-network 网络,以便可以通过网络连接到 web-server 容器。例如,我们可以创建一个名为 client 的容器,并在其中运行一个命令,以连接到 web-server 容器:

代码语言:javascript复制
docker run --rm --network my-network busybox wget -O- http://web-server

这将创建一个名为 client 的容器,并使用 Busybox 镜像运行一个 wget 命令,以连接到 web-server 容器。由于这两个容器都连接到 my-network 网络,因此 client 容器可以通过 web-server 容器的名称 web-server 进行访问。

暴露端口

在 Docker 网络中,容器可以使用名称进行通信。但是,如果容器需要在外部网络上公开服务,例如 Web 服务器或数据库,它必须通过端口进行公开。这可以通过 Docker 网络配置中的端口映射来实现。

例如,我们可以使用以下命令将 web-server 容器的端口 80 映射到主机的端口 8080:

代码语言:javascript复制
docker run -d --name web-server -p 8080:80 --network my-network nginx

现在,我们可以通过访问主机的端口 8080 来访问 web-server 容器中的 Nginx Web 服务器。

删除 Docker 网络

如果我们不再需要某个 Docker 网络,我们可以使用以下命令将其删除:

代码语言:javascript复制
docker network rm my-network

这将删除名为 my-network 的 Docker 网络以及与其关联的所有容器。

0 人点赞