Docker网络作用:容器间的互联和通信以及端口映射,容器IP变动时候可以通过服务名直接网络通信而不受到影响
常用基本命令
docker newwork --help
docker network ls #查看网络
docker network inspect XXX网络名字 #查看网络源数据
docker network rm XXX网络名字 #删除网络
网络模式有五种
- bridge模式:使用–network bridge指定,默认使用docker0
- host模式:使用–network host指定
- none模式:使用–network none指定
- container模式:使用–network container:NAME或者容器ID指定
- 自定义网络
容器实例内默认网络IP生产规则
1 先启动两个ubuntu容器实例
2 docker inspect 容器ID or 容器名字
3 关闭u2实例,新建u3,查看ip变化
可以看出:docker容器内部的ip是有可能会发生改变的
bridge
桥接模式
Docker 服务默认会创建一个 docker0 网桥(其上有一个 docker0 内部接口),该桥接网络的名称为docker0,它在内核层连通了其他的物理或虚拟网卡,这就将所有容器和本地主机都放到同一个物理网络。Docker 默认指定了 docker0 接口 的 IP 地址和子网掩码,让主机和容器之间可以通过网桥相互通信。
# 查看 bridge 网络的详细信息,并通过 grep 获取名称项
docker network inspect bridge | grep name
ifconfig | grep docker
docker run -d -p 8081:8080 --name tomcat81 billygoo/tomcat8-jdk8
docker run -d -p 8082:8080 --name tomcat82 billygoo/tomcat8-jdk8
host
直接使用宿主机的 IP 地址与外界进行通信,不再需要额外进行NAT 转换。
容器将不会获得一个独立的Network Namespace, 而是和宿主机共用一个Network Namespace。容器将不会虚拟出自己的网卡而是使用宿主机的IP和端口。
docker run -d --network host --name tomcat83 billygoo/tomcat8-jdk8
#这里就不要写 -p 了,通过-p设置的参数将不会起到任何作用,端口号会以主机端口号为主,重复时则递增。
docker inspect tomcat83 | tail -n 20
#可以看到Networks里边Gateway和IPAddress都是空
此时访问 http://宿主机IP:8080/即可访问tomcat
none
在none模式下,并不为Docker容器进行任何网络配置。 也就是说,这个Docker容器没有网卡、IP、路由等信息,只有一个lo
需要我们自己为Docker容器添加网卡、配置IP等。
在容器外部查看
container
新建的容器和已经存在的一个容器共享一个网络ip配置而不是和宿主机共享。新创建的容器不会创建自己的网卡,配置自己的IP,而是和一个指定的容器共享IP、端口范围等。同样,两个容器除了网络方面,其他的如文件系统、进程列表等还是隔离的。
用Alpine Linux镜像模拟,用tomcat会公用同一个ip同一个端口,导致端口冲突
docker run -it --name alpine1 alpine /bin/sh
docker run -it --network container:alpine1 --name alpine2 alpine /bin/sh
运行结果,验证共用搭桥
关闭alpine1,再看看alpine2也没了
自定义网络
自定义桥接网络,自定义网络默认使用的是桥接网络bridge
docker network ls
#新建自定义网络
docker network create zzyy_newwork
新建容器加入上一步新建的自定义网络
docker run -d -p 8081:8080 --network zzyy_network --name tomcat81 billygoo/tomcat8-jdk8
docker run -d -p 8082:8080 --network zzyy_network --name tomcat82 billygoo/tomcat8-jdk8
互相ping测试
自定义网络本身就维护好了主机名和ip的对应关系(ip和域名都能通)
自定义网络本身就维护好了主机名和ip的对应关系(ip和域名都能通)
自定义网络本身就维护好了主机名和ip的对应关系(ip和域名都能通)