Docker网络详解
Docker网络详解
Docker网络模式
| 模式 | 说明 |
|---|---|
| bridge | 桥接网络(默认) |
| host | 主机网络 |
| none | 无网络 |
| overlay | 跨主机网络 |
| macvlan | MAC地址虚拟化 |
Bridge网络
默认bridge
# 创建容器(默认使用bridge)
docker run -d --name web nginx
# 查看网络
docker network ls
docker network inspect bridge
自定义bridge
# 创建自定义网络
docker network create mynetwork
# 使用自定义网络运行容器
docker run -d --name web --network mynetwork nginx
docker run -d --name app --network mynetwork myapp
# 容器间可以通过名称通信
docker exec app ping web
Host网络
# 使用主机网络
docker run -d --name web --network host nginx
# 容器直接使用主机IP
curl http://localhost
None网络
# 无网络容器
docker run -d --name isolated --network none alpine
# 仅有loopback接口
docker exec isolated ip addr
容器间通信
同一网络内
# 创建网络
docker network create appnet
# 启动容器
docker run -d --name db --network appnet mysql
docker run -d --name api --network appnet myapi
# api容器可以通过db名称访问数据库
# 连接字符串:mysql://db:3306/mydb
跨网络通信
# 容器连接多个网络
docker network connect appnet container1
docker network disconnect appnet container1
端口映射
# 随机端口
docker run -d -P nginx
# 指定端口
docker run -d -p 8080:80 nginx
# 多个端口
docker run -d -p 80:80 -p 443:443 nginx
# 绑定特定IP
docker run -d -p 127.0.0.1:8080:80 nginx
# 查看端口映射
docker port container_name
DNS解析
# 自定义DNS
docker run -d --dns 8.8.8.8 nginx
# 使用主机DNS
docker run -d --dns-host mydns nginx
实践:微服务网络配置
#!/bin/bash
# 创建网络
docker network create frontend
docker network create backend
# 启动数据库
docker run -d --name db --network backend \
-e MYSQL_ROOT_PASSWORD=secret \
mysql:8
# 启动API
docker run -d --name api --network backend \
-e DB_HOST=db \
myapi:v1
# 启动前端
docker run -d --name web --network frontend \
-p 80:80 \
myweb:v1
# 连接API到前端网络
docker network connect frontend api
网络排查
# 查看容器网络详情
docker inspect --format='{{json .NetworkSettings.Networks}}' container_name
# 进入容器检查网络
docker exec container_name ip addr
docker exec container_name ping other_container
# 查看网络日志
docker network logs mynetwork
总结
Docker网络是容器化应用的重要组成部分。理解不同网络模式的特点,能够正确配置容器间的通信。