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 端口,以便我们可以通过主机的浏览器访问容器。
现在,我们可以在浏