Docker提供多种网络驱动,适用于不同场景:
# 查看所有网络
docker network ls
# 查看网络详情
docker network inspect bridge
# 创建自定义网络
docker network create mynetwork
# 创建指定驱动的网络
docker network create --driver bridge mybridge
# 删除网络
docker network rm mynetwork
# 清理未使用的网络
docker network prune
# 使用默认bridge网络
docker run -d --name web1 nginx
# 使用自定义bridge网络
docker network create my-bridge
docker run -d --name web2 --network my-bridge nginx
# 容器连接到网络
docker network connect my-bridge web1
# 容器断开网络
docker network disconnect my-bridge web1
# 使用主机网络(无端口映射)
docker run -d --network host nginx
# 容器直接使用主机的80端口
# 性能最好,但失去网络隔离
# 禁用网络
docker run -d --network none nginx
# 适用于不需要网络的批处理任务
# 创建自定义网络
docker network create app-network
# 运行MySQL容器
docker run -d \
--name mysql-db \
--network app-network \
-e MYSQL_ROOT_PASSWORD=123456 \
-e MYSQL_DATABASE=myapp \
mysql:8.0
# 运行应用容器,通过容器名访问MySQL
docker run -d \
--name web-app \
--network app-network \
-e DB_HOST=mysql-db \
-e DB_PORT=3306 \
-e DB_USER=root \
-e DB_PASSWORD=123456 \
-p 8080:80 \
myapp:latest
# 在web-app容器中可以直接使用mysql-db作为主机名
# 映射单个端口
docker run -d -p 8080:80 nginx
# 映射到随机端口
docker run -d -p 80 nginx
# 映射多个端口
docker run -d -p 8080:80 -p 8443:443 nginx
# 指定协议
docker run -d -p 8080:80/tcp -p 8081:80/udp nginx
# 绑定到特定IP
docker run -d -p 127.0.0.1:8080:80 nginx
# 查看端口映射
docker port container_name
# 为容器设置网络别名
docker run -d \
--name web1 \
--network app-network \
--network-alias webapp \
nginx
docker run -d \
--name web2 \
--network app-network \
--network-alias webapp \
nginx
# 其他容器访问webapp时会负载均衡到web1和web2
# 查看容器IP地址
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' container_name
# 查看容器网络配置
docker inspect container_name | grep -A 20 NetworkSettings
# 在容器内查看网络
docker exec container_name ip addr
docker exec container_name ping other_container
# 创建指定子网的网络
docker network create \
--driver bridge \
--subnet 172.20.0.0/16 \
--gateway 172.20.0.1 \
custom-network
# 指定容器IP
docker run -d \
--name web \
--network custom-network \
--ip 172.20.0.10 \
nginx
# 初始化Swarm
docker swarm init
# 创建overlay网络
docker network create \
--driver overlay \
--attachable \
my-overlay
# 跨主机容器通信
docker run -d --network my-overlay nginx
# 测试容器间连通性
docker exec web1 ping web2
# 查看容器DNS配置
docker exec web1 cat /etc/resolv.conf
# 查看容器路由表
docker exec web1 ip route
# 使用网络工具容器
docker run --rm --network container:web1 nicolaka/netshoot