docker的网络很重要,我们前面所说的所有东西都依赖网络才能工作。我们从两方面来学习网络:
端口映射和网络模式
1.端口映射:默认情况下,容器和宿主机之间网络是隔离的,我们可以通过端口映射的方式,将容器中的端口,映射到宿主机的某个端口上,这样我们就可以通过宿主机的ip+port来访问容器里的内容。
docker的端口映射:
(1)随机映射:-P(大写)
格式:docker run -d -P 依赖镜像名
演示:docker run -d -P --name cc nginx
输入docker ps查看创建的容器:
输入netstat -tnulp查看本机端口信息:
发现本机创建了一个32768的端口映射到容器的80端口中
(2)指定主机ip映射:-p 宿主机ip::容器端口
格式:docker run -d -p 宿主机ip::容器端口 --name 容器名 依赖镜像名
演示:docker run -d -p 127.0.0.1::80 --name mynginx nginx
输入docker ps查看常见的容器:
(3)指定主机ip+port映射:-p 宿主机ip:宿主机端口:容器端口
格式:docker run -d -p 宿主机ip:宿主机端口:容器端口 --name 容器名 依赖镜像名
演示:docker run -d -p 127.0.0.1:12345:80 --name mynginx1 nginx
输入docker ps查看常见的容器:
(4) 多端口映射:
格式:docker run -d -p 宿主机端口1:容器端口1 -p 宿主机端口2:容器端口2 --name 容器名 依赖镜像名
演示:docker run -d -p 520:499 -p 7653:80 --name mynginx2 nginx
输入docker ps查看常见的容器:
2.网络模式
2.1 docker 网络命令:docker network help //查看网络命令帮助
docker network connect //将一个容器连接到一个网络
docker network create //创建一个网络
docker network disconnect //从网络断开一个容器
docker network inspect //在一个或多个网络上显示详细信息
docker network ls //查看docker中的网络列表
docker network rm //删除一个或多个网络
2.2 docker常用的网络模式:
bridge模式:docker的默认模式,它会在docker容器启动的时候自动配置好自己的网络信息,同一宿主机的所有容器都在 这个网络下,彼此间可以通信。类似vmware虚拟机的桥接模式。利用宿主机的网卡进行通信,因为涉及到 网络转换,所以会造成资源消耗,网络效率低。
host模式:容器使用宿主机的ip地址进行通信。特点:容器和宿主机共享网络。
container模式:新创建的容器间使用,使用已创建的容器的网络,类似一个局域网。特点:容器和容器共享网络。
none模式:这种模式最纯粹,不会帮你做任何的网络配置,可以最大限度的定制化。不提供网络服务,容器启动后无网络 连接。
overlay模式:容器彼此不再同一网络,而且能互相通信。
2.3 bridge实践:
(1)创建网络my-bridge
格式:docker network create --driver 网络类型 网络名称
演示:docker network create --driver bridge my-bridge
(2) 创建自定义网段与网关的网络my-bridge2
格式:docker network create --driver bridge --gateway 172.99.0.1 --subnet 172.99.0.0/16 my-bridge2
说明:--gateway:网关 。 --subnet:ip/子网。
(3)在自定义创建的网络my-bridge中创建并启动容器nginx-test1
格式:docker run --net=网络名称 -itd --name 容器名 依赖镜像名
演示:docker run --net=my-bridge -itd --name nginx-test1 nginx
(4)在自定义创建的网络my-bridge2中创建并启动容器nginx-test2
演示:docker run --net=my-bridge2 -itd --name nginx-test2 nginx
(5)容器断开网络
格式:docker network disconnect 网络名 容器名
演示:网络my-bridge与容器nginx-test1断开
docker network disconnect my-bridge nginx-test1
演示:网络my-bridge2与容器nginx-test2断开
docker network disconnect my-bridge2 nginx-test2
(5)容器连接网络
格式:docker network connect 网络名 容器名
演示:网络my-bridge与容器nginx-test2连接
docker network disconnect my-bridge nginx-test2
演示:网络my-bridge2与容器nginx-test1连接
docker network disconnect my-bridge2 nginx-test1
2.4 host模式实践:
host模型:容器使用宿主机的ip地址进行对外提供服务,本身没有ip地址。
格式:docker run --net=host -itd --name 容器名 依赖镜像
演示: docker run --net=host -itd --name host-test nginx
可以在浏览器中直接输入127.0.0.1,能看到容器中的nginx首页
2.5 none模式实践:
none网络模式,是一种自由度非常高的网络模式,我们可以最大化的自定义我们想要的网络。
格式:docker run --net=none -itd --name 容器名 依赖镜像
演示: docker run --net=none -itd --name none-test nginx