Docker 容器网络
1. Docker 网络基本命令
docker network ls#查看网络
docker network inspect 网络#查看网络内部信息
docker network create 网络#新建网络
docker network connect 网络 容器#将容器加入到该网络中
docker network disconnect 网络 容器#断开网络
docker network rm 网络#移除网络(需要断开连接到该网络的所有容器)
docker network prune 网络#移除未使用的网络
2. 网络模式简介
docker安装后会自动创建3种网络:bridge(默认)、host、none
2.1 host 模式
容器和宿主机共享Network namespace
容器和宿主机的端口不同
外部主机与容器直接通信,网络缺少隔离性
2.2 Bridge 模式
IP递增且自动互补
2.3 none 模式
Docker容器拥有自己的Network Namespace
不为Docker容器进行任何网络配置(Docker容器没有网卡、IP、路由等信息。需要我们自己为Docker容器添加网卡、配置IP等。)
容器只有lo回环网络,没有其他网卡。这种类型的网络没有办法联网,封闭的网络能很好的保证容器的安全性。
3.自定义网络
docker提供三种自定义网络驱动
bridge(默认)
overlay
macvlan
overlay,macvlan 用于创建跨主机网络
3.1 自定义网络
创建网络
创建容器并指定网络类型为自定义mynet1:同一网络中直接ping容器名称即可
ip addr show查看到添加了接口:IP为172.18.0.1,为其容器的网关
IP递增且自动替补
3.2 自定义网关、网段
创建网络:指定子网、网关
docker network create --subnet 172.20.0.0/24 --gateway 172.20.0.1 net1
--subnet:网段
--gateway:网关
创建容器,指定IP,网络类型
docker run -it --name demo1 --ip 172.20.0.10 --network net1 busybox
docker run -it --name demo2 --ip 172.20.0.20 --network net1 busybox
--ip:指定容器ip
--network:指定网络
3.3 不同网桥之间通信
1.创建容器
docker run -it --name demo3 busybox
2.连接网络
docker network connect net1 demo3
4.同一主机间通信、跨主机通信
4.1 docker 容器通信
ip通信
容器名称通信
4.1.1 joined 容器
1.创建容器web_demo(webserver包含nginx服务)
docker run -d --name web_demo webserver
2.joined容器到busybox上(busybox包含shell及基本命令的小版本环境)
docker run -it --network container:web_demo busybox
4.1.2 link 链接容器
1.创建容器
docker run -d --name demo nginx
2.link容器
docker run -it --link demo:nginx busybox
#当释放掉demo,开启一个demo1占用172.17.0.2后
#再开demo(IP为172.17.0.4),发现解析随之变化
4.2 容器访问外网
SNAT(地址转发:MASQUERADE)
4.3 外网访问容器
使用docker-proxy进程通信
DNAT地址转发
docker run -d --name demo1 -p 80:80 nginx
-p:指定映射端口
内部访问
外部访问
4.3.1 测试
删除DNAT规则
iptables -t nat -D DOCKER 3
删除后发现依然可以访问(docker-proxy进程存在的前提下)
kill掉docker-proxy进程
kill 进程id,发现依然可以访问
(在地址转发正常的前提下)