Docker自定义网络
Docker使用Linux桥接,在宿主机虚拟一个Docker容器网桥(docker0),Docker启动一个容器时会根据Docker网桥的网段分配给容器一个IP地址,称为Container-IP,同时Docker网是每个容器的默认网关。在同一宿主机内的容器都接入同一个网桥,容器之间通过容器de Container-IP直接通信。
- 每一个安装了Docker的Linux主机都有一个docker0的虚拟网卡。桥接网卡
- 每启动一个容器linux主机多了一个虚拟网卡。
相关命令:
docker network ls :查看本地网络列表
docker network create --subnet 子网IP 网络名:自定义网络
docker network inspect 网络名:查看自定义网络详情
docker network rm 网络名:删除自定义网络
docker network connect 网络名 容器名:连接一个容器到一个网络
docker network disconnect 网络名 容器名:断开连接
docker network ls
网络模式:
bridge模式(默认)
- --net=bridge
- 在Docker网桥docker0上为容器创建新的网络栈
none模式
- --net=none
- 不配置网络,用户可以稍后进入容器,自行配置
container模式
- --net=container:name/id
- 容器和另外一个容器共享Network namespace。 kubernetes中的pod就是多个容器共享一个Network namespace。
host模式
- --net=host
容器和宿主机共享Network namespace;
用户自定义
- --net=自定义网络名
- 用户自己使用network相关命令定义网络,创建容器的时候可以指定为自己定义的网络
docker network create:
# 1、自定义创建的默认default "bridge" 默认都可以用主机名访问通
# 2、子网可以选择的IP地址从192.168.0.2 到192.168.255.255
docker network create --subnet=192.168.0.1/16 --gateway 192.168.0.1 customnet
docker network create --driver bridge --subnet 192.168.0.1/16 --gateway 192.168.0.1 customnet
启动容器使用 “–net 网络名” 或者 “–network 网络名”,把容器加入到自己创建的网络中
# 容器启动,指定容器ip
docker run --ip 192.168.0.1 --net 自定义网络名
# 容器启动,指定自定义网络方式(推荐使用)
docker run -d -P --network 自定义网络名 启动的容器名
# 使用容器名的网络
docker run -d -P --network container:容器名 alpine
# 后台启动tomcat,docker inspect tomcat可以查看ip地址变为自定义网络的IP范围内的地址
docker run -d -P --network customnet --name=tomcat tomcatnginx
# 后台启动nginx
docker run -d -P --network customnet --name=nginx nginxnginx
# 第一种:进入tomcat控制台,如果ping命令找不到可以使用第二种方式尝试
docker exec -it tomcat /bin/bash
#测试,自定义
ping nginx
# 第一种:进入容器名的控制台
docker run -it --network container:容器名 alpine
#测试,自定义
ping tomcat
结果:
[root~]# docker run -it --network container:nginx alpine
/ # ping tomcat
PING tomcat (192.168.0.2): 56 data bytes
64 bytes from 192.168.0.2: seq=0 ttl=64 time=0.081 ms
docker network inspect:
- driver 设置网络类型
- subnet 设置自定义ip路由网络组
- gateway 设置此网络默认ip路由
docker network connect:
# 将容器挂在指定网络下
docker network connect 网络名 容器名
# 把tomcat容器加入到customnet网络,在customnet网络中就可以访问tomcat
docker network connect customnet tomcat
docker network disconnect:
docker network disconnect 网络名 容器名
docker network disconnect customnet tomcat