← 返回首页
🌐

Docker网络详解

📂 devops ⏱ 2 min 267 words

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网络是容器化应用的重要组成部分。理解不同网络模式的特点,能够正确配置容器间的通信。