一、Docker网络简介
Docker网络是容器化应用程序的重要组成部分,它使得容器之间可以互相通信和连接,同时也提供了容器与外部环境之间的隔离和连接。
二、Docker网络模式
Docker 提供了多种网络模式,可以通过docker network ls
命令查看docker的网络列表,常见有网络模式有如下:
- Bridge:默认模式,创建一个命名为"docker0"的虚拟网桥设备,将所有容器连接到该网桥设备上,实现容器之间的通信。
- Host:容器与主机共享网络命名空间,即通过Host模式启动的所有容器共享主机的ip和端口范围。容器将不会虚拟出自己的网卡以及配置自己的IP等。不过,容器的其他方面,如文件系统、进程列表等还相互隔离的,并且各容器间的端口以及主机被占用的端口不能冲突。
- None:Docker的none模式下,不会为容器创建任何网络设备,容器无法访问其他容器或者主机的网络设备,也无法使用主机的IP地址进行网络通信,容器与主机之间是完全隔离的。
- Container:在创建容器时指定具体的网络共享的容器,新创建的容器不会创建自己的网卡,也不会配置自己的 IP,而是使用所指定容器的 IP、端口范围等。同样,两个容器除了网络方面是共享,其他方面都是各自独立的。
三、Bridge模式
当Docker server启动时,会在主机上创建一个名为docker0的虚拟网桥。此后,主机上每启动一个Docker容器都会连接到这个虚拟网桥上。
当创建一个 Docker 容器的时候,容器会获得一个独立的Network Namespace,并在这个独立的Network Namespace下为容器设置一个默认的ip,同时会创建了一对 veth pair接口。这对接口一端在容器内,即 eth0;另一端在本地并被挂载到docker0网桥,名称以 veth 开头。通过这对接口可以让容器与主机进行通信,也可以让容器与容器之间进行通信。
- 指定Bridge模式启动一个容器,默认不添加
--net
参数启动,就是Bridge模式,也可以通过--net=bridge
来指定网络模式为Bridge,通常配合-p
来指定主机与容器之间的端口映射关系。docker run -d --name n1 -p 8080:80 nginx
docker run -d --name n2 --net=bridge -p 8080:80 nginx
- 通过
docker inspect 容器id
查看容器的信息,显示网络模式为Bridge,以及分配的IP信息。
四、Host 模式
Docker的host模式是一种特殊的网络模式,当Docker容器启动时,容器不再会获得一个独立的Network Namespace,而是和宿主机共用一个Network Namespace,它会自动获取主机的IP地址和端口号范围,并且与主机共用这个ip。容器可以直接访问其他容器或者主机的网络设备,同时,容器还可以使用主机的IP地址进行网络通信,而不需要使用Docker桥接设备分配的私有IP地址。
- 指定为Host 模式启动一个容器,通过
--net=host
来指定网络模式为Host。docker run -d --name n3 --net=host nginx
- 通过
docker inspect 容器id
查看容器的信息,显示网络模式为Host,IP信息为空。
五、None 模式
Docker的None模式下,不会为容器创建任何网络设备,容器无法访问其他容器或者主机的网络设备,也无法使用主机的IP地址进行网络通信。None模式的优点是可以最大程度地隔离容器和主机,避免了容器之间的相互干扰,同时也可以避免Docker桥接设备占用主机的网络接口。因此,none模式适用于需要高隔离性和低网络依赖性的应用程序。
- 指定为None 模式启动一个容器,通过
--net=none
来指定网络模式为None。docker run -d --name n4 --net=none nginx
- 通过
docker inspect 容器id
查看容器的信息,显示网络模式为Host,IP信息为空。
六、Container 模式
Docker的Container模式下,在创建容器时可以指定具体的网络共享的容器,新创建的容器不会创建自己的网卡以及配置自己的 IP,而是使用所指定容器的 IP、端口范围等,使的两个容器之间可以使用 localhost 高效快速通信。两个容器除了网络方面,其他的如文件系统,进程列表等还是隔离的。两个容器的进程可以通过lo网卡设备通信,并且两个容器的端口不能相同。
- 使用默认网络模式创建一个nginx容器n1
docker run -d --name n1 -p 8080:80 nginx
- 使用Container模式创建另一个mysql容器n2,与n1共享网络命名空间。
docker run -e MYSQL_ROOT_PASSWORD=root -d --name n2 --net=container:n1 --restart=always mysql
七、自定义网络模式
当我们直接使用--net=bridge
去指定IP运行docker 的,会提示报错如下:
如果想要指定ip去运行docker容器的话,就的先创建一个自定义一个网络模式,再指定IP运行docker容器。
-
可以通过命令
docker network create --driver bridge --subnet 172.30.1.0/24 --gateway 172.30.1.1 my_net
去创建一个自定义网络模式。 -
使用自定义网络模式,指定ip去启动容器
docker run -d --name n2 --net=my_net --ip 172.30.1.3 -p 8080:80 nginx
-
查看容器信息
文章来源:https://www.toymoban.com/news/detail-806949.html -
删除自定义网络
docker network rm my_net
文章来源地址https://www.toymoban.com/news/detail-806949.html
到了这里,关于Docker 网络管理的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!