Docker 创建桥接网络

Docker 是一种用于容器化应用程序的开源平台。在 Docker 中,可以通过创建桥接网络来连接多个容器,使它们能够相互通信。本文将介绍如何使用 Docker 创建桥接网络,并提供相应的代码示例。

什么是桥接网络?

桥接网络是一种虚拟网络,它允许不同的容器通过一个网桥连接在一起,就像连接在同一物理网络上一样。每个容器都可以具有自己的 IP 地址,并能够相互通信。

创建桥接网络

首先,我们需要安装 Docker 并启动 Docker 服务。然后,我们可以使用 Docker 命令行工具来创建桥接网络。

以下是创建桥接网络的流程图:

flowchart TD
    A(创建桥接网络) --> B(指定网络驱动)
    B --> C(指定子网和网关)
    C --> D(指定网络名称)
    D --> E(连接容器)

指定网络驱动

在创建桥接网络之前,需要选择一个适合的网络驱动。Docker 提供了多种网络驱动,包括 bridge、overlay、macvlan 等。在本示例中,我们将使用 bridge 驱动。

指定子网和网关

在创建桥接网络时,可以指定一个子网和网关。子网是一个 IP 地址范围,用于分配给各个容器。网关是子网中的一个 IP 地址,用于容器之间的通信。

下面是一个使用 bridge 驱动、指定子网为 172.18.0.0/16,网关为 172.18.0.1 的示例命令:

docker network create --driver bridge --subnet 172.18.0.0/16 --gateway 172.18.0.1 mynetwork

指定网络名称

创建桥接网络时,可以为网络指定一个名称。名称用于在 Docker 主机上标识该网络。在本示例中,我们将网络名称设置为 mynetwork。

连接容器

创建桥接网络后,我们可以使用以下命令将容器连接到该网络:

docker run --name container1 --network mynetwork -d <image>
docker run --name container2 --network mynetwork -d <image>

在上述命令中,--network 参数指定了要连接到的网络名称。通过在同一个网络上运行的容器可以使用它们的容器名称进行通信。

代码示例

下面是一个使用 Node.js 编写的简单示例代码,演示了如何使用 Docker 创建桥接网络并连接两个容器进行通信。

// app.js

const express = require('express');
const app = express();
const port = 3000;

app.get('/', (req, res) => {
  res.send('Hello from Container 1!');
});

app.listen(port, () => {
  console.log(`Server running on port ${port}`);
});
# Dockerfile

FROM node:14

WORKDIR /app

COPY package.json package-lock.json ./

RUN npm ci

COPY . .

EXPOSE 3000

CMD [ "node", "app.js" ]

上述示例代码包括一个简单的 Express 应用程序和一个 Dockerfile。Dockerfile 中定义了如何构建容器镜像,包括复制应用程序文件、安装依赖项和设置容器启动时的命令。

要构建容器镜像,请运行以下命令:

docker build -t myapp .

接下来,我们可以使用以下命令创建一个桥接网络并连接两个容器:

docker network create --driver bridge --subnet 172.18.0.0/16 --gateway 172.18.0.1 mynetwork

docker run --name container1 --network mynetwork -p 3000:3000 -d myapp
docker run --name container2 --network mynetwork -d myapp

在上述命令中,-p 参数用于将容器的 3000 端口映射到主机的 3000 端口,以便我们可以通过主机的浏览器访问容器。

现在,我们可以在浏