容器网络
一、为什么要学习容器网络?
如果要使用Docker来搭建redis集群或者别的集群需要制定Docker容器的IP地址,但是每次容器重启都会修改容器的IP地址,所以需要了解如何设置容器的网络。
二、Docker默认网络
Docker安装后,会默认创建三种网络类型,可使用如下命令来查看:
docker network ls
在启动容器时使用--network bridge
制定网络类型,bridge
为桥接网络
默认情况下启动的Docker容器,都是使用briage,Docker安装时创建的桥接网络,每次Docker容器重启时,会按照顺序获取对应的IP地址,这个就会导致重启时,Docker的IP地址就变了。
三、Docker网络模型
从上面的网络模型可以看出,容器从原理上是可以与宿主机乃至外界的其他机器通信的。同一宿主机上,容器之间都是连接到Docker0这个网桥上的,它可以作为虚拟交换机使容器可以相互通信。然而,由于宿主机的IP地址与容器的IP地址均不在同一网段,不足以使宿主机以外的网络主动发现容器的存在。为了使外界可以访问容器中的进程,Docker采用率端口绑定的方式,也就是通过iptables的NAT,将宿主机上的端口号流量转发到容器内的端口上。 在宿主机上,可以通过iptables -t nat -L -n,查到一条DNAT规则: briage模式的容器与外界通信时,必定会占用宿主机的端口,从而与宿主机竞争端口资源,对宿主机端口的管理会是一个比较大的问题。同时,由于容器与外界通信是基于三层以上iptables NAT,性能和消耗上的耗损是可以预见的
四、自定义容器网络
因为默认的网络不能指定固定的地址,所以我们将创建自定义网络,并指定网段:192.168.1.0/24并命名为mynetwork,指令如下:
docker network create --subnet=192.168.1.0/24 mynetwork
###五、使用自定义网络
docker run -itd --name nginx --net mynetwork -p 80:80 --ip 192.168.1.2 nginx
-d: 后台运行容器,并返回容器ID;
-i: 以交互模式运行容器,通常与 -t 同时使用;
-p: 端口映射,格式为:主机(宿主)端口:容器端口
-t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
-V: 为容器挂载目录,比如 /usr/docker/data:/data 前者为数宿主机目录后者为容器内目录
--ip: 为容器制定一个固定的ip
--net: 指定网络模式
六、查看容器IP地址
docker network inspect mynetwork