目录
一. Docker网络介绍
1.1 网络模式
Docker在创建容器时有四种网络模式:bridge(桥接)/host(主机)/container(容器一般不用)/none(一般不用),bridge为默认不需要用--net去指定,其他三种模式需要在创建容器时使用--net去指定
#查看网络模式
ip a
ifconfig
#Docker网络模式相关命令查看
docker network --help
#列出Docker现有网络模式
docker network ls
#查看桥接模式下的网络状态
docker network inspect bridge
#获取多个到容器id
docker ps -aq
#删除所有容器 $代表引用
docker rm -f $(docker -ps -aq)
1.2 bridge模式(默认模式)
1.2.1 什么是桥接模式
docker run时使用--net=bridge,这种模式会为每个容器分配一个独立的Network Namespace,
同一个宿主机上的所有容器会在同一个网段下,相互之间是可以通信的
注1:bridge为默认模式,不需要使用参数--net去指定,使用了--net参数反而无效
注2:bridge模式无法指定容器IP(但非绝对,还是可以修改滴)
桥接模式:宿主机启动两个容器|服务器:会分配两个IP地址
1.2.2 效果演示
#查看桥接模式下的网络状态
docker network inspect bridge
1.2.3 桥接模式的特点
1. 先启动一个容器
docker run -di centos:7
可以看见:出现了一个容器并且分配了一个 ip 为172.17.0.2
2. 下面再来一次,再次启动一个容器
docker run -di centos:7
可以发现在原来的容器基础上又增添了一个新的容器,并且又添加了一个新的 ip
1.3 host模式
1.3.1 什么是host模式
docker run时使用--net=host,容器将不会虚拟出IP/端口,而是使用宿主机的IP和端口
docker run -itd --net=host 961769676411
注1:host模式不能使用端口映射和自定义路由规则,这些都与主机一致,-p 与-icc 参数是无效的
1.3.2 查看仅主机模式的特点
#查看主机模式下的网络状态
docker network inspect host
#--net=host:指定容器:为仅主机模式,--restart=always:开机自启动
docker run -di --name c1 --net=host --restart=always centos:7
可以看出:host仅主机模式是不会分配虚拟IP
二. Docker网络实操
2.1 bridge桥接模式
一些常用的指令
#查看我们自身创建的
docker images
#这种不需要开放宿主机防火墙端口,如8081端口不需要开放
docker run -di --name tomcat1 -p 8080:8080 94d2357d288e
#--restart=always:容器随着Docker引擎启动而启动
docker run -di --name tomcat2 --restart=always -p 8081:8080 94d2357d288e
#查看我们自身创建的镜像
docker images
#映射
docker run -di -P --name mt2 94d2357d288e
映射成果
但是随机分配的端口比较难记住,不好掌控,那我们来指定端口
#8081映射8080
docker run -di -p 8081:8080 --name mt3 94d2357d288e
映射成功
2.1 host仅主机模式
需要指定模式,但是不需要指定端口,默认会使用宿主机端口,会一一对应,如果部署了两个相同的服务,像是8080,就必须使用桥接模式
#这种要开放宿主机防火墙端口
docker run -di --net=host --name mt5 --restart=always 94d2357d288e
#指定数据卷(如果不记得数据卷跟谁绑定了就用这个)
docker run -di --name mt5 -v /javacy/software/mydocker/:/home/javacy/docker --net=host --restart=always 94d2357d288e
#查看该容器的详细信息
docker inspect mt5(容器名字)
三. Docker自定义网络
3.1 为什么要使用自定义网络
是为了容器之间能相互通信。因为开发会使用微服务springCloud,会把一个项目拆成多个项目进行操作,例如:
用户微服务 项目1,订单微服务 项目2,商品微服务 项目3
而模块与模块之间是需要相互访问的,所以容器与容器之间也是需要相互通信,如果不通信的话就会访问不了,而要通信就必须知道服务部署在哪里,这时就需要知道ip,也需要指定ip,此时桥接网络和仅主机网络是不能满足我们的需求的,所以我们需要使用自定义网络进行操作。
3.2 创建自定义网络
1. 创建自定义网络
#创建自定义网络
docker network create --subnet=172.18.0.0/16 mynetwork
#查看网络
docker network ls
0/16:分配会从0到16这几个ip进行选择
mynetwork:是名字
2. 分配指定ip
docker run -it --name tomcat8 --net=mynetwork -v /javacy/software/mydocker/:/home/javacy/docker --ip 172.18.0.8 94d2357d288e /bin/bash
3.3 测试
再开一个新的连接,查看ip是不是自己定义的
#查看网络 mynetwork是名字
docker network inspect mynetwork
可以发现创建成功了
也可以进入容器的内部,检查内部的网络情况
#查看镜像
docker images
#进入容器内部 tomcat8是容器名字
docker exec -it tomcat8 /bin/bash
#要进行下载,因为没有ifconfig这个命令
yum install -y vim
#下载命令
yum install net-tools.x86_64 -y
#查看命令
ifconfig
发现IP是固定