docker的容器之间需要进行业务通信
11.1 默认网络
初始安装docker 之后,有三种网络,可以通过 docker -network ls
查看
[root@localhost ~]# docker network ls NETWORK ID NAME DRIVER SCOPE 691eb043e53a bridge bridge local fda698a7f0a7 host host local 958d74aaa8f5 none null local
-
bridge 为每一个容器分配、设置IP等,并将容器连接到一个docker0 虚拟网桥,默认为该模式。
-
host 容器将不会虚拟出自己的网卡,配置自己的IP等,而是使用宿主机的IP和端口
-
none 容器有独立的Network namespace,但并没有对其进行任何网络设置,如分配veth pair和网络连接,IP等
-
container 新创建的容器不会创建自己的网卡和配置自己的IP,而是和一个指定的容器共享IP、端口范围等
11.1.1 bridge网络模式
在该模式中,Docker守护进程创建了一个虚拟以太网桥 docker0 ,新建的容器会自动桥接到这个接口,附加在其上的任何网卡之间都能自动转发数据包。
创建容器时,--net bridge或--network bridge ,可指定该模式,不写模式也是这个模式。
ip a #可以看到有个docker0 docker run -it --name bbox01 busybox #跑一个busybox,并进入到容器去 # -itd 则是不进去 ip a #可以看到eth0的信息 exit docker start bbox01 ip a #可以看到比原先多出来veth的接口,可见每次容器创建都会有一对接口,相互连接起来
11.1.2 host网络模式
docker stop bbox01 #停止bbox01 docker run -it --name bbox02 --network host daocloud.io/library/busybox:1.26-glibc #在国内另一个网址上下载busybox,用host网络模式创建bbox02 exit #退出bbox02的容器 docker start bbox02 ip addr #查看网卡信息,可以看到共用的是宿主机的
11.1.3 none网络模式
实际操作中很少用。
docker stop bbox02 docker run -it --name bbox03 --network none busybox #none网络模式创建bbox03 ip addr #查看网卡信息,可以看到没有网卡信息
11.1.4 container网络模式
conainer网络模式是docker中一种较为特别的网络模式。在创建容器时通过参数 --net container:已运行的容器名称|ID
或者 --network container:已运行的容器名称|ID
指定;
处于这个模式下的docker容器会共享一个网络栈,这样两个容器之间可以使用localhost高效快速通信。
container网络模式创建的容器,会和指定的容器共享一个IP,端口范围等网络方面。除此之外,文件系统、进程列表等其他的还是隔离的
docker run -it --name bbox04 -network container:bbox1 busybox #创建bbox04,共用bbox01的网络 ip addr #查看到此时的网络信息,如果另开一个会话进入到bbox01中,可以进行肉眼对比
11.2 自定义网络
因为容器关停后的IP不是固定的,自定义网络后可以ping到容器名,可实现容器间相互通信
docker deamon实现了一个内嵌的DNS server,dns可以自动解析容器名为ip。且docker dns只能用在自定义网络模式中,实际开发中还是以自定义网络居多。
11.2.1 创建网络
docker network create [网络名称]
docker network --help #查看network相关命令 docker network create custom_network #创建一个叫custome_network的网络,默认bridge docker network ls #肉眼验证 docker run -it --name bbox06 --network custom_network busybox #用自定义网络创建容器 #另一个会话中,随便进入另一个容器就能ping到bbox06的容器 docker run -it --name bbox07 --net custom_network busybox #--network和--net是一样的 ping bbox07 #肉眼验证
11.2.2 连接网络
docker network connect [网络名称] [容器名称]
11.2.3 断开
docker network disconnect [网络名称] [容器名称]
11.2.4 移除
docker network rm [网络名称]