网络
字数: 0 字 时长: 0 分钟
Docker 网络
字数: 0 字 时长: 0 分钟
1. Docker 网络概述

Docker 容器默认运行在相对隔离的网络环境中。
在实际项目中,不同容器之间往往需要相互通信,例如:
Java 应用
↓
MySQL
Java 应用
↓
Redis如果多个容器需要直接通信,可以将它们加入同一个 Docker 网络。
简单来说:
Docker 网络就是把多个容器加入到同一个“局域网”中,让它们能够互相访问。
例如:
Docker Network:app-network
├── mysql
├── redis
└── java-app加入同一个自定义网络后,容器之间可以直接通过容器名称进行访问。
例如:
mysql:3306
redis:6379这样就不需要依赖可能发生变化的容器 IP。
2. Docker 网络常用命令
Docker 使用 docker network 管理网络。
基本格式:
docker network [COMMAND]常见命令:
| 命令 | 作用 | 人话理解 | 示例 |
|---|---|---|---|
docker network ls | 查看 Docker 网络 | 看现在有哪些网络 | docker network ls |
docker network create | 创建自定义网络 | 新建一个容器局域网 | docker network create app-network |
docker network inspect | 查看网络详细信息 | 看哪些容器加入了这个网络 | docker network inspect app-network |
docker network connect | 将容器加入网络 | 把一个已有容器加入网络 | docker network connect app-network mysql |
docker network disconnect | 将容器移出网络 | 让容器退出这个网络 | docker network disconnect app-network mysql |
docker network rm | 删除网络 | 删除不用的网络 | docker network rm app-network |
3. 创建自定义网络
创建一个名为 app-network 的网络:
docker network create app-network查看网络:
docker network ls查看详细信息:
docker network inspect app-network4. 创建容器并加入网络
创建 MySQL 容器,并加入 app-network:
docker run \
--name mysql \
--network app-network \
-e MYSQL_ROOT_PASSWORD=123456 \
-d \
mysql:8.0创建一个 Java 应用容器,并加入相同网络:
docker run \
--name java-app \
--network app-network \
-d \
javaweb:1.0此时网络关系为:
app-network
│
├── mysql
│
└── java-app因为两个容器处于同一个自定义网络中,所以 java-app 可以直接使用容器名称访问 MySQL:
mysql:3306例如数据库地址可以配置为:
jdbc:mysql://mysql:3306/database而不需要写:
jdbc:mysql://172.x.x.x:3306/database自定义 Docker 网络支持容器名称解析,因此推荐通过容器名访问其他容器,而不是写死容器 IP。
5. 将已有容器加入网络
如果容器已经创建,也可以通过:
docker network connect app-network mysql将 mysql 容器加入 app-network。
查看网络:
docker network inspect app-network可以看到当前加入该网络的容器。
如果需要移出网络:
docker network disconnect app-network mysql6. Docker Compose 与网络
使用 Docker Compose 时,通常不需要手动创建网络。
Docker Compose 默认会为当前项目创建一个网络,并将 Compose 中定义的服务加入这个网络。
例如:
services:
mysql:
image: mysql:8.0
redis:
image: redis:7
web:
build: .启动:
docker compose up -dDocker Compose 会自动形成类似这样的网络:
Compose 默认网络
├── mysql
├── redis
└── web因此 web 服务可以直接通过:
mysql:3306
redis:6379访问其他服务。
这也是为什么 Compose 项目中通常使用:
url: jdbc:mysql://mysql:3306/database而不是写死 MySQL 容器的 IP 地址。
7. 小结
Docker 网络最核心的作用就是:
让多个容器加入同一个网络,并通过容器名互相通信。
最常用的几个命令:
# 查看网络
docker network ls
# 创建网络
docker network create app-network
# 查看网络详细信息
docker network inspect app-network
# 将容器加入网络
docker network connect app-network mysql
# 将容器移出网络
docker network disconnect app-network mysql
# 删除网络
docker network rm app-network创建容器时也可以直接加入指定网络:
docker run \
--name mysql \
--network app-network \
-d \
mysql:8.0简单记住:
同一个自定义 Docker 网络中的容器,可以直接通过容器名称互相访问。