Docker 网络管理

一、Docker网络简介

Docker网络是容器化应用程序的重要组成部分,它使得容器之间可以互相通信和连接,同时也提供了容器与外部环境之间的隔离和连接。

二、Docker网络网络模式

Docker 提供了多种网络模式,可以通过docker network ls 命令查看docker的网络列表,常见有网络模式有如下:

  1. Bridge:默认模式,创建一个命名为"docker0"的虚拟网桥设备,将所有容器连接到该网桥设备上,实现容器之间的通信。
  2. Host:容器与主机共享网络命名空间,即通过Host模式启动的所有容器共享主机的ip和端口范围。容器将不会虚拟出自己的网卡,配置自己的IP等。不过,容器的其他方面,如文件系统、进程列表等还相互隔离的,并且各容器间的端口以及主机被占用的端口不能冲突。
  3. None:Docker的none模式下,不会为容器创建任何网络设备,容器无法访问其他容器或者主机的网络设备,也无法使用主机的IP地址进行网络通信,容器与主机之间是完全隔离的。
  4. Container:在创建容器时指定具体的网络共享的容器,新创建的容器不会创建自己的网卡,配置自己的 IP,而是使用所指定容器的 IP、端口范围等。同样,两个容器除了网络方面是共享,其他方面都是各自独立的。

三、Bridge模式

当Docker server启动时,会在主机上创建一个名为docker0的虚拟网桥。此后,主机上每启动一个Docker容器都会连接到这个虚拟网桥上。

当创建一个 Docker 容器的时候,容器会获得一个独立的Network Namespace,并在这个独立的Network Namespace下为容器设置一个默认的ip,同时会创建了一对 veth pair接口。这对接口一端在容器内,即 eth0;另一端在本地并被挂载到docker0网桥,名称以 veth 开头。通过这对接口可以让容器与主机进行通信,也可以让容器与容器之间进行通信。

  1. 指定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
  2. 通过docker inspect 容器id 查看容器的信息,显示网络模式为Bridge,以及分配的IP信息。

四、Host 模式

Docker的host模式是一种特殊的网络模式,当Docker容器启动时,容器不再会获得一个独立的Network Namespace,而是和宿主机共用一个Network Namespace,它会自动获取主机的IP地址和端口号,并将其作为容器的IP地址和端口号。容器可以直接访问其他容器或者主机的网络设备,同时,容器还可以使用主机的IP地址进行网络通信,而不需要使用Docker桥接设备分配的私有IP地址。

  1. 指定为Host 模式启动一个容器,通过--net=host来指定网络模式为Host。
    docker run -d --name n3 --net=host nginx
  2. 通过docker inspect 容器id 查看容器的信息,显示网络模式为Host,IP信息为空。

五、None 模式

Docker的None模式下,不会为容器创建任何网络设备,容器无法访问其他容器或者主机的网络设备,也无法使用主机的IP地址进行网络通信。None模式的优点是可以最大程度地隔离容器和主机,避免了容器之间的相互干扰,同时也可以避免Docker桥接设备占用主机的网络接口。因此,none模式适用于需要高隔离性和低网络依赖性的应用程序。

  1. 指定为None 模式启动一个容器,通过--net=none来指定网络模式为None。
    docker run -d --name n4 --net=none nginx
  2. 通过docker inspect 容器id 查看容器的信息,显示网络模式为Host,IP信息为空。

六、Container 模式

Docker的Container模式下,在创建容器时可以指定具体的网络共享的容器,新创建的容器不会创建自己的网卡,配置自己的 IP,而是使用所指定容器的 IP、端口范围等,使的两个容器之间可以使用 localhost 高效快速通信。两个容器除了网络方面,其他的如文件系统,进程列表等还是隔离的。两个容器的进程可以通过lo网卡设备通信,并且两个容器的端口不能相同。

  1. 使用默认网络模式创建一个nginx容器n1
    docker run -d --name n1 -p 8080:80 nginx
  2. 使用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容器。

  1. 可以通过命令docker network create --driver bridge --subnet 172.30.1.0/24 --gateway 172.30.1.1 my_net去创建一个自定义网络模式。

  2. 使用自定义网络模式,指定ip去启动容器
    docker run -d --name n2 --net=my_net --ip 172.30.1.3 -p 8080:80 nginx

  3. 查看容器信息

  4. 删除自定义网络
    docker network rm my_net

相关推荐
边疆.6 小时前
【Linux】编辑器vim的使用和理解gcc编译器
linux·运维·服务器·编辑器·vim
羑悻的小杀马特6 小时前
从零搭建群晖私有影音库:NasTool自动化追剧全流程拆解与远程访问协议优化实践
运维·数据库·自动化
雾江流6 小时前
快指点击器 1.1.9 | 支持多点操作、自动化脚本,操作记录等功能,快速解放双手
运维·自动化·软件工程
孙同学要努力6 小时前
《Linux篇》命令行参数与环境变量
linux·运维
WIN赢7 小时前
【UI自动化相关】
运维·自动化
notion20259 小时前
Optuna 黑科技自动化超参数优化框架详解
运维·科技·其他·自动化
CS Beginner12 小时前
【Linux】Tomcat基本配置
linux·运维·tomcat
..Move...12 小时前
快速搭建Docker私有仓库指南
运维·docker·容器
小小的木头人14 小时前
Windows Docker desktop 部署
运维·kafka
jiuri_121514 小时前
Docker使用详解:在ARM64嵌入式环境部署Python应用
python·docker·容器