Docker学习(6) 容器网络

容器网络

1、容器网络管理

1-1、容器网络概述

Docker容器的网络是其与外界通信的桥梁,Docker提供了多种网络模式以满足不同场景下的需求。以下是Docker容器网络的一些关键要点:

网络模式

  1. Bridge模式:这是Docker的默认网络模式。Docker会为容器虚拟出一个网络,并为每个容器分配一个处于这个网络的IP地址。容器之间以及容器与宿主机之间可以通过这个虚拟网络进行通信。
  2. Host模式:在这种模式下,容器与宿主机共享网络命名空间,这意味着容器将直接使用宿主机的网络接口和IP地址。这种模式可以提高容器间的通信效率,减少网络延迟,但可能会降低网络隔离性。
  3. None模式:在这种模式下,容器不会设置任何网络信息,不会对网络进行任何配置。用户可以自行给容器添加配置,为其分配网络环境。

网络配置

Docker容器的网络配置可以非常灵活。用户可以创建自定义网络,指定容器的IP地址、端口映射等。此外,Docker还支持使用Overlay网络,这是一种透明的虚拟网络,可以将多个Docker宿主机上的容器连接到同一个虚拟网络中,实现容器之间的跨主机通信。

网络性能与调优

在使用Docker容器网络时,性能是一个重要的考虑因素。用户可以通过调整内核参数、优化网络配置等方式来提高容器网络的性能。例如,可以调整TCP/IP协议栈的缓冲区大小、改变TCP拥塞算法等。

1-2、查看容器网络
  • 查看容器命令格式
##格式:
docker network ls [OPTIONS]
##参数介绍
-f--filter filter
##过滤条件
--format string
##格式化打印结果
--no-trunc
##不缩略显示
-q--quiet
##只显示网络对象的ID号

  • 查看所有网络ID
[root@wangliukun ~]# docker network ls
NETWORK ID     NAME      DRIVER    SCOPE
15459af130a8   bridge    bridge    local
d7aa777f618f   host      host      local
e3466b2803db   none      null      local

如上所示,容器网络也有自己的ID,DRIVER表示容器网络驱动程序,SCOPE表示网络作用域,默认情况,容器创建,自动创建bridge,host,none三种网络

  • 添加-f 过滤条件查找容器网络
[root@wangliukun ~]# docker network ls -f 'driver=host'
NETWORK ID     NAME      DRIVER    SCOPE
d7aa777f618f   host      host      local
[root@wangliukun ~]# 

成功过滤host网络

  • 添加--no-trunc参数,以不缩写形式打印容器:
[root@wangliukun ~]# docker network ls --no-trunc
NETWORK ID                                                         NAME      DRIVER    SCOPE
15459af130a85d8ceb4b27da946d44920cffec4a1c5e7dd1a2cf10b3c052af33   bridge    bridge    local
d7aa777f618fc65c9b751d27ccf511e67e3168ca43db54ea693dd2d77b78a91e   host      host      local
e3466b2803db935eade6c2e5d18b79a7395e7560c0c37fec79ac2ee3c8a0408c   none      null      local
[root@wangliukun ~]# 
  • 添加-q参数,列出所有ID号:
[root@wangliukun ~]# docker network ls -q
15459af130a8
d7aa777f618f
e3466b2803db
[root@wangliukun ~]# 
1-3、创建容器网络
  • 创建容器命令格式:
##格式:
docker network create [OPTIONS] NETWORK
#参数介绍
-d , --driver string
##指定网络模式    默认`default`网络模式
--subnet strings
##指定子网网段
--ip-range strings
##指定容器的IP地址范围,格式同subnet参数
--gateway strings
##子网的IPv4或IPv6网关
  • 创建容器网络,指定模式
[root@wangliukun ~]# docker ps -a
CONTAINER ID   IMAGE     COMMAND       CREATED       STATUS                   PORTS     NAMES
d72ab63f7926   centos    "/bin/bash"   4 hours ago   Exited (0) 3 hours ago             new-container
f81fcd84a688   centos    "/bin/bash"   5 hours ago   Exited (0) 4 hours ago             data-volume
##创建容器网络
[root@wangliukun ~]# docker network create -d bridge new-container
7a00e3f1288d63f94686361a964e9d9e46f46d24212a6fba6457759017296c76
##容器ID号
##查看
[root@wangliukun ~]# docker network ls
NETWORK ID     NAME            DRIVER    SCOPE
15459af130a8   bridge          bridge    local
d7aa777f618f   host            host      local
7a00e3f1288d   new-container   bridge    local#生成bridge网络
e3466b2803db   none            null      local
[root@wangliukun ~]# 
1-4、删除网络
  • 删除网络格式:
docker network rm NETWORK
  • 删除:
##查看是否有需要删除的网络
[root@wangliukun ~]# docker network ls
NETWORK ID     NAME            DRIVER    SCOPE
15459af130a8   bridge          bridge    local
d7aa777f618f   host            host      local
7a00e3f1288d   new-container   bridge    local
e3466b2803db   none            null      local
[root@wangliukun ~]# 
##删除网络
[root@wangliukun ~]# docker network rm new-container
new-container
##查看
[root@wangliukun ~]# docker network ls
NETWORK ID     NAME      DRIVER    SCOPE
15459af130a8   bridge    bridge    local
d7aa777f618f   host      host      local
e3466b2803db   none      null      local
[root@wangliukun ~]# 
1-5、容器网络详细信息
  • 查看容器网络详细信息格式;
##格式:
docker network inspect [OPTIONS]
##参数:
-f , --format string
##使用给定模板格式化输出
  • 使用给定模板格式化输出:
[root@wangliukun ~]# docker network inspect none
[
    {
        "Name": "none",
        "Id": "e3466b2803db935eade6c2e5d18b79a7395e7560c0c37fec79ac2ee3c8a0408c",
        "Created": "2024-03-05T12:57:34.996120608+08:00",
        "Scope": "local",
        "Driver": "null",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": null,
            "Config": null
        },
        "Internal": false,
        "Attachable": false,
        "Ingress": false,
        "ConfigFrom": {
            "Network": ""
        },
        "ConfigOnly": false,
        "Containers": {},
        "Options": {},
        "Labels": {}
    }
]
1-6、配置容器网络

配置容器网络就是为用户创建的容器,添加网络配置

  • 配置网络命令格式:
##格式:
docker run/create --network NETWORK
  • 示例代码:
[root@wangliukun ~]# docker run -it -d \
> --network=host \
> centos /bin/bash
ea312615c9917b24c2878cf26aeb85a09e4cdbdde6874414edfd30ddbc6b102d
[root@wangliukun ~]# 

以上,添加--network参数,指定了容器的host网络模式。

  • 查看容器网络信息
[root@wangliukun ~]# docker inspect ea |grep NetworkMode
            "NetworkMode": "host",
[root@wangliukun ~]# 

以上可以看到NetworkMode为host网络模式

  • 下面不指定网络,以做对比
[root@wangliukun ~]# docker inspect 5b |grep NetworkMode
            "NetworkMode": "default",
[root@wangliukun ~]# 

以上可看出,不指定模式,默认default网络模式

1-7、容器网络连接与断开
  • 容器网络连接与断开命令格式:
##连接
docker network connect [OPTIONS] NETWORK CONTAINER
##断开
docker network disconnect [OPTIONS] NETWORK CONTAINER
  • 实例
##创建
[root@wangliukun ~]# docker run -it -d --network=host centos /bin/bash
5157ee0c8f044c9e8becb20eb019344dac8ba5f87a74f2494fbd36043defab68
##查看ID
[root@wangliukun ~]# docker network ls
NETWORK ID     NAME      DRIVER    SCOPE
f43aea4fd7cc   bridge    bridge    local
d7aa777f618f   host      host      local
e3466b2803db   none      null      local
##停止容器
[root@wangliukun ~]# docker stop 51
51
##断开
[root@wangliukun ~]# docker network disconnect d7 51
[root@wangliukun ~]# 

以上示例将容器与host网络断开,直接输入ID号即可,断开网络前先停止容器运行

  • 再次执行断开:
[root@wangliukun ~]# docker network disconnect d7 51
Error response from daemon: container 5157ee0c8f044c9e8becb20eb019344dac8ba5f87a74f2494fbd36043defab68 is not connected to the network host
[root@wangliukun ~]# 

报错,说明之前的断开是生效的,提示网络已断开

  • 连接:
[root@wangliukun ~]# docker network connect d7 51
[root@wangliukun ~]# 

2、none网络

Docker的None网络模式是一种特殊的网络模式,它为容器创建了一个完全封闭的网络环境。在None网络模式下,容器不会有任何网络接口,也不会连接到任何网络,因此它无法使用网络通信,也无法访问外部网络或其他容器。

具体来说,当容器处于None网络模式时,除了lo(本地回环地址)之外,容器没有其他任何网卡。这意味着容器与外界的网络完全隔离,无法接收或发送任何网络请求。这种模式的最大特点是安全性高,适用于那些对安全性要求极高并且不需要联网的应用。例如,某个容器的唯一用途是生成随机密码,那么就可以将其放置在None网络中,以避免密码被窃取。

在创建Docker容器时,可以使用--net=none参数来指定容器使用None网络模式。需要注意的是,虽然None网络模式提供了高度的安全性,但它也限制了容器的通信能力。因此,在选择是否使用None网络模式时,需要根据应用的实际需求进行权衡。

3、host网络

Docker的host网络模式是一种特殊的网络配置,它允许容器与宿主机共享网络命名空间。在这种模式下,容器将直接使用宿主机的网络接口和IP地址,而不是创建一个独立的网络命名空间。

host模式的特点包括:

  1. 容器和宿主机共享网络栈,即它们使用相同的网络接口和IP地址。
  2. 容器可以直接访问宿主机上的网络接口、端口等资源,无需进行NAT转换,从而提高了网络性能。
  3. 容器之间可以直接通信,无需经过宿主机。

host模式适用于需要容器与宿主机之间网络性能最大化的场景,例如搭建大型web服务或进行高性能计算等任务。然而,需要注意的是,host模式可能会导致容器之间的网络冲突,因为所有容器都共享宿主机的网络命名空间。

4、bridge网络

Docker的bridge网络模式是Docker默认的网络设置方式。当Docker进程启动时,会在主机上创建一个名为docker0的虚拟网桥,所有新创建的容器默认都会连接到这个网桥上。这个虚拟网桥的工作方式类似于物理交换机,使得主机上的所有容器都连接在了一个二层网络上。

bridge网络模式的特点包括:

  1. 容器间通信:连接到同一个网桥的容器能够相互通信,而没有连接到该网桥的容器则被隔离,无法直接通信。
  2. IP地址分配:Docker使用NAT方式为容器分配IP地址。每个容器内部的服务监听的端口都会与宿主机的某一个端口进行“绑定”,使得外界可以主动将网络报文发送至容器内部。
  3. 安全性:Docker的bridge网络驱动会自动在宿主机上设置防火墙规则,以确保不同网桥之间的容器不能直接相互通信,从而增强了安全性。
  4. 灵活性:除了默认的bridge网络,用户还可以根据需要创建自定义的bridge网络。自定义的bridge网络优先级高于默认的bridge网络,为用户提供了更多的网络配置选项。

5、container网络

container 是容器网络中一种较为特殊的网络模式。这个模式指定新创建的容器和已经存在的容器共享一个网络命名空间,而不是和宿主机共享。新创建的容口部器没有自己的网卡、IP 地址等,而是和一个指定的容器共享 IP 地址、端口号等。这两个容器之间不存在网络隔离,而这两个容器与宿主机以及其他容器之间存在网络隔离。

6、多节点容器网络

6-1、Overlay网络

Docker Overlay网络是一种用于容器间通信的网络模型,基于Docker的Overlay网络驱动程序实现。它允许在多个Docker主机上创建一个虚拟的、透明的网络,使得容器可以像在同一主机上一样进行通信。Overlay网络可以解决传统的主机间网络通信的限制,允许容器在不同的主机上运行,使得容器的部署更加灵活和可扩展。

Overlay网络使用VXLAN(Virtual eXtensible LAN)技术实现容器间的网络通信。VXLAN是一种将二层以太网帧封装在UDP包中进行传输的技术,它可以扩展现有网络的规模和容量。

Overlay网络的优点包括:

  1. 跨主机通信:Overlay网络可以将多个Docker主机上的容器连接起来,实现跨主机的容器通信。
  2. 网络隔离:每个Overlay网络都是独立的,可以实现网络隔离。
  3. 灵活性:Overlay网络可以很容易地进行扩展和管理,使得应用程序可以根据需要进行快速部署和重构。
  4. 安全性:Overlay网络可以加密通信,确保数据的安全性。

然而,Overlay网络也有一些缺点:

  1. 性能问题:Overlay网络使用VXLAN协议实现跨主机通信,会增加数据包的传输延迟,对网络性能有一定影响。
  2. 配置复杂:Overlay网络的配置比较复杂,需要进行多个配置步骤。

在使用Overlay网络时,Docker会透明地处理每一个数据包的路由,使其往返于正确的Docker daemon宿主机和正确的目标容器之间。当初始化一个Swarm或将一个Docker主机加入到一个现有的Swarm时,在该Docker主机上会创建两个新的网络:一个叫做ingress的Overlay网络,它处理与Swarm服务相关的控制和数据流量。

6-2、Macvlan网络

Docker的多节点容器网络中的Macvlan网络是一种虚拟网络技术,它允许你在主机的网络接口上配置多个虚拟的网络接口。每个虚拟接口都有自己独立的MAC地址,并可以配置IP地址进行通信。这使得容器网络可以与主机在同一个网段中,共享同一个广播域。

Macvlan网络的主要优势在于其简单性和高效性。与bridge网络相比,Macvlan省去了bridge的存在,因此配置和调试相对简单,且效率也更高。此外,Macvlan还支持VLAN,使得网络配置更加灵活。

在Docker中使用Macvlan网络时,需要注意以下几点:

  1. 网络接口选择:你需要选择一个主机上的网络接口作为Macvlan的基础。这个接口将用于创建虚拟网络接口,并连接容器。
  2. IP地址管理:你需要为每个容器分配唯一的IP地址,以确保它们之间的通信不会发生冲突。这可以通过Docker的网络配置或手动设置来实现。
  3. 安全性考虑:由于Macvlan网络使得容器与主机共享网络空间,因此需要特别注意安全性问题。确保对容器的网络访问进行适当的限制和监控。

在配置Macvlan网络时,你可能还需要考虑子接口的使用。如果一个网卡需要创建多个Macvlan网络,你可以使用网卡的子接口来创建独立的Macvlan网络。这样,每个Macvlan网络都可以有自己的配置和隔离

7、容器管理指令:

##查看容器命令
#格式:
docker network ls [OPTIONS]
#参数介绍
-f--filter filter    #过滤条件

--format string    #格式化打印结果

--no-trunc    #不缩略显示

-q--quiet    #只显示网络对象的ID号


##创建容器命令
#格式:
docker network create [OPTIONS] NETWORK
#参数介绍
-d , --driver string    #指定网络模式    默认`default`网络模式

--subnet strings    #指定子网网段

--ip-range strings    #指定容器的IP地址范围,格式同subnet参数

--gateway strings    #子网的IPv4或IPv6网关



##删除网络
#格式:
docker network rm NETWORK


##查看容器网络详细信息
##格式:
docker network inspect [OPTIONS]
##参数:
-f , --format string    ##使用给定模板格式化输出


##配置网络命令
##格式:
docker run/create --network NETWORK


##容器网络连接与断开命令格式:

##连接
docker network connect [OPTIONS] NETWORK CONTAINER
##断开
docker network disconnect [OPTIONS] NETWORK CONTAINER

上一章:docker 容器数据卷
下一章:docker私有仓库

  • 45
    点赞
  • 42
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
非常好的选择!Docker 是一个开源的容器化平台,可以帮助开发人员更轻松地构建、打包、交付和运行应用程序。学习 Docker 可以让你更好地理解容器化技术,并且在开发和部署应用程序时提供更高的灵活性和可移植性。 以下是一些学习 Docker 的步骤: 1. 安装 Docker:首先,你需要安装 DockerDocker 提供了适用于不同操作系统的安装程序,如 Docker Desktop for Windows 或 Docker Desktop for Mac。你可以访问 Docker 官方网站(https://www.docker.com/)获取详细的安装指南。 2. 学习 Docker 基本概念:在开始使用 Docker 之前,建议先了解一些基本概念,例如镜像(Image)、容器(Container)、仓库(Repository)等。可以阅读 Docker 官方文档或参考一些在线教程和博客来学习这些概念。 3. 创建和运行容器学习如何使用 Docker 创建和运行容器是非常重要的一步。你可以使用 Docker 命令行工具或者 Docker Compose 来创建和管理容器。尝试使用一些基本的命令,如 docker run、docker build 等,来构建和运行容器。 4. 使用 Docker 镜像:Docker 镜像是容器的基础,它包含了应用程序的运行环境和所有依赖项。学习如何使用 Docker Hub 或者其他镜像仓库来获取和使用现有的镜像,以及如何创建自定义的镜像。 5. Docker 网络和存储:学习如何配置 Docker 网络和存储可以帮助你更好地管理容器之间的通信和数据持久化。了解 Docker 网络模式、网络驱动和存储卷等概念,并尝试在容器之间进行通信和数据共享。 6. Docker Compose 和 Swarm:学习如何使用 Docker Compose 和 Docker Swarm 可以帮助你更好地编排和管理多个容器Docker Compose 可以定义和管理多个容器的配置,而 Docker Swarm 则可以将多个 Docker 主机组成一个集群,实现容器的高可用性和负载均衡。 7. 实践项目:尝试在实际项目中应用 Docker,例如将一个现有的应用程序容器化,或者使用 Docker 构建和部署一个完整的应用栈。通过实践,你可以更深入地理解 Docker 的各种用法和场景。 记得不断练习和探索,参考文档和教程可以帮助你更好地理解 Docker 的使用。祝你学习顺利!如果有任何问题,随时向我提问。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值