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
网络:
docker run -d --name web-server --network my-network nginx
这将创建一个名为 web-server
的容器,它将运行 Nginx Web 服务器,并连接到 my-network
网络。现在,我们可以使用 Docker CLI 来验证容器是否已连接到正确的网络:
docker inspect web-server | grep NetworkMode
这将返回一个类似于以下内容的输出:
代码语言:javascript复制"NetworkMode": "my-network"
在 Docker 网络中连接容器
现在,我们可以创建另一个容器,并连接到 my-network
网络,以便可以通过网络连接到 web-server
容器。例如,我们可以创建一个名为 client
的容器,并在其中运行一个命令,以连接到 web-server
容器:
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:
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 网络以及与其关联的所有容器。