首页 > 其他分享 >Docker网络

Docker网络

时间:2024-09-12 23:36:29浏览次数:11  
标签:busybox container network 容器 网络 Docker docker

Docker网络是Docker容器间以及容器与宿主机之前通信的基础,它提供了一套灵活的网络配置方案,允许用户自定义网络拓扑,从而满足不同应用场景的需求。

一、Docker网络基础

Docker提供了多种网络模式,每种模式有不同的网络隔离和连接方式,主要包括:

1、Bridge(桥接模式,默认,常用)

  • 为每个容器分配一个网络桥接接口,容器间通信通过Docker内置的虚拟网桥(通常是docker0)进行。
  • 容器可以与宿主机直接通信,外部网络通过端口映射访问容器内部服务。
  • 使用iptables的NAT地址转换实现容器与宿主机的通信。

2、Host

  • 容器共享宿主机的网络命名空间,直接使用宿主机的网络堆栈,容器的网络配置与宿主机相同。
  • 容器端口直接映射到宿主机的端口,无需额外配置。
  • 降低了网络隔离性,但提高了性能。

3、None

  • 不为容器配置网络,容器没有网络连接能力。
  • 通常用于不需要网络连接的容器。

4、Container(用得少,局限大)

  • 容器和容器之间公用一个IP和端口。
  • 通常用于测试场景。

5、User-Defined Networks(用户自定义网络)

  • 可以配置网络驱动、子网、IP范围等,为容器提供更灵活的网络配置。
  • 包括overlay(用于跨多个宿主机的容器通信)和macvlan(为容器提供与宿主机同层的网络接口)等类型。

二、容器访问外网

容器要想访问外部网络,需要本地系统的转发支持。

在 Linux 系统中,检查转发是否打开:

sysctl net.ipv4.ip_forward
[root@localhost ~]# sysctl net.ipv4.ip_forward
net.ipv4.ip_forward = 1

如果为 0,说明没有开启转发,则需要手动打开。

sysctl -w net.ipv4.ip_forward=1
[root@localhost ~]# sysctl -w net.ipv4.ip_forward=1
net.ipv4.ip_forward = 1

如果在启动 Docker 服务的时候设定 --ip-forward=true,那么 Docker 就会自动设定系统的 ip_forward 参数值 为 1。 

三、Docker网络配置

在Docker中,可以使用以下命令来进行网络配置:

# 查看网络列表
docker network ls

# 查看一个Docker网络的详细信息
docker network inspect [网络名称]

# 断开容器与网络的连接
docker network disconnect [网络名称] [容器名称或ID]

# 删除一个已存在的Docker网络
docker network rm [网络名称]

# 创建一个名为 my-bridge-network 的Docker桥接网络,并指定子网和网关
docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 my-bridge-network

# 启动容器时指定网络(--net [网络名称])
docker run -d -p 8090:80 --mount type=volume,source=nginx_volume,target=/usr/share/nginx/html --name nginx-container --net my-bridge-network nginx:latest

# 启动容器时指定网络和固定IP地址
docker run -d --net [网络名称] --ip [新的IP地址] --name [容器名称] [镜像名称]

# 将容器连接到一个已存在的Docker网络
docker network connect [网络名称] [容器名称或ID]

示例:

1)创建自定义桥接网络

[root@localhost ~]# docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 my-bridge-network
cf8f2d55247f6c854dae9241858455445e1e1cad7c82a8bec47265fac9275122
[root@localhost ~]# docker network ls
NETWORK ID     NAME                DRIVER    SCOPE
592cddf71fad   bridge              bridge    local
c1993b581192   host                host      local
cf8f2d55247f   my-bridge-network   bridge    local
c21728fbfa4d   none                null      local

2)启动容器时指定网络

[root@localhost ~]# docker run -itd --net my-bridge-network --name busybox-container-1 busybox
ea264b47898086b2209686fef01e07c5981704dcaab28e8eba833da2ddaff74d
[root@localhost ~]# docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED         STATUS         PORTS     NAMES
ea264b478980   busybox   "sh"      4 seconds ago   Up 3 seconds             busybox-container-1

3)启动容器时指定网络和固定IP地址

[root@localhost ~]# docker run -itd --net my-bridge-network --ip 192.168.4.110 --name busybox-container-2 busybox
cc10a9bb6f9514eb2182cae9973dc6e1a63421f80d42af909b36aa108f03f83d
[root@localhost ~]# docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED         STATUS         PORTS     NAMES
cc10a9bb6f95   busybox   "sh"      8 seconds ago   Up 7 seconds             busybox-container-2
ea264b478980   busybox   "sh"      3 minutes ago   Up 3 minutes             busybox-container-1

4)检查两个容器间的网络是否能连通

[root@localhost ~]# docker exec -it busybox-container-1 ping busybox-container-2
PING busybox-container-2 (192.168.4.110): 56 data bytes
64 bytes from 192.168.4.110: seq=0 ttl=64 time=0.209 ms
64 bytes from 192.168.4.110: seq=1 ttl=64 time=0.354 ms
64 bytes from 192.168.4.110: seq=2 ttl=64 time=0.218 ms
64 bytes from 192.168.4.110: seq=3 ttl=64 time=0.141 ms
64 bytes from 192.168.4.110: seq=4 ttl=64 time=0.104 ms
^C
--- busybox-container-2 ping statistics ---
5 packets transmitted, 5 packets received, 0% packet loss
round-trip min/avg/max = 0.104/0.205/0.354 ms

可以看出这两个容器间的网络是连通的。

5)启动一个容器但不指定网络

[root@localhost ~]# docker run -itd --name busybox-container-3 busybox
55ef9654c71a499dec30b7f0ad30ede6db819cbe5c32c4b2cb27597337ca6833
[root@localhost ~]# docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED          STATUS          PORTS     NAMES
55ef9654c71a   busybox   "sh"      3 seconds ago    Up 3 seconds              busybox-container-3
cc10a9bb6f95   busybox   "sh"      12 minutes ago   Up 12 minutes             busybox-container-2
ea264b478980   busybox   "sh"      15 minutes ago   Up 15 minutes             busybox-container-1
[root@localhost ~]# docker exec -it busybox-container-1 ping busybox-container-3
ping: bad address 'busybox-container-3'

可以发现不同网络下的两个容器间是 ping 不通的。

6)使用 docker network connect 命令可以使得原本不在同一网络下的容器之间也能够互相通信

在 Docker 中,docker network connect [网络名称] [容器名称或ID] 命令主要用于将一个已存在的容器连接到另一个已存在的网络上。

[root@localhost ~]# docker network connect my-bridge-network busybox-container-3
[root@localhost ~]# docker exec -it busybox-container-1 ping busybox-container-3
PING busybox-container-3 (192.168.0.3): 56 data bytes
64 bytes from 192.168.0.3: seq=0 ttl=64 time=0.102 ms
64 bytes from 192.168.0.3: seq=1 ttl=64 time=0.090 ms
64 bytes from 192.168.0.3: seq=2 ttl=64 time=0.098 ms
^C
--- busybox-container-3 ping statistics ---
3 packets transmitted, 3 packets received, 0% packet loss
round-trip min/avg/max = 0.090/0.096/0.102 ms

可以发现这时候就可以 ping 的通了。

7)查看容器的 /etc/hosts 信息

[root@localhost ~]# docker exec -it busybox-container-3 cat /etc/hosts
127.0.0.1       localhost
::1     localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.17.0.2      55ef9654c71a
192.168.0.3     55ef9654c71a

8)查看一个Docker网络的详细信息

[root@localhost ~]# docker network inspect my-bridge-network
[
    {
        "Name": "my-bridge-network",
        "Id": "cf8f2d55247f6c854dae9241858455445e1e1cad7c82a8bec47265fac9275122",
        "Created": "2024-09-12T22:38:26.886089982+08:00",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": {},
            "Config": [
                {
                    "Subnet": "192.168.0.0/16",
                    "Gateway": "192.168.0.1"
                }
            ]
        },
        "Internal": false,
        "Attachable": false,
        "Ingress": false,
        "ConfigFrom": {
            "Network": ""
        },
        "ConfigOnly": false,
        "Containers": {
            "55ef9654c71a499dec30b7f0ad30ede6db819cbe5c32c4b2cb27597337ca6833": {
                "Name": "busybox-container-3",
                "EndpointID": "c7f81f20348469749fdd7a23e29d2be939c2c71d75d6149565c4d59ed4f93ab3",
                "MacAddress": "02:42:c0:a8:00:03",
                "IPv4Address": "192.168.0.3/16",
                "IPv6Address": ""
            },
            "cc10a9bb6f9514eb2182cae9973dc6e1a63421f80d42af909b36aa108f03f83d": {
                "Name": "busybox-container-2",
                "EndpointID": "1922c8921cbe099cc4104a54810978a953e082de17a465a0376add21810e3749",
                "MacAddress": "02:42:c0:a8:04:6e",
                "IPv4Address": "192.168.4.110/16",
                "IPv6Address": ""
            },
            "ea264b47898086b2209686fef01e07c5981704dcaab28e8eba833da2ddaff74d": {
                "Name": "busybox-container-1",
                "EndpointID": "fd28ba7d898d5b431d58efa9dcfab07fb505bbdba34dc78ad8ac299e20800a74",
                "MacAddress": "02:42:c0:a8:00:02",
                "IPv4Address": "192.168.0.2/16",
                "IPv6Address": ""
            }
        },
        "Options": {},
        "Labels": {}
    }
]

 

至此本文就全部介绍完了,希望对您有所帮助!

标签:busybox,container,network,容器,网络,Docker,docker
From: https://www.cnblogs.com/xyh9039/p/18405348

相关文章

  • 深度神经网络DNN、RNN、RCNN及多种机器学习金融交易策略研究|附数据代码
    全文链接:https://tecdat.cn/?p=37668原文出处:拓端数据部落公众号 分析师:AijunZhang 在当今的金融领域,量化交易正凭借其科学性和高效性逐渐成为主流投资方式之一。随着大数据技术的蓬勃发展,量化交易借助先进的数学模型和计算机分析能力,摒弃了人的主观判断,通过挖掘海量历史数......
  • 网络编程基础项目一:TCP实现FTP功能
    目录FTP核心原理项目功能介绍: 大致思路复习stat函数stat获取当前路径下文件的属性代码服务器客户端 总结FTP核心原理客户端连接服务器后,向服务器发送一个文件。文件名可以通过参数指定,服务器端接收客户端传来的文件(文件名随意),如果文件不存在自动创建文件,如果......
  • 网络编程(setsockopt、超时检测)
    【1】setsockopt:设置套接字属性set:设置sock:套接字option:属性intsetsockopt(intsockfd,intlevel,intoptname,void*optval,socklen_toptlen)功能:获得/设置套接字属性参数:sockfd:套接字描述符level:协议层optname:选项名optval:选项值optlen:选项值大小返回值:......
  • 图与网络——TSP问题精解
    旅行商问题(TravellingSalesmanProblem,TSP)是组合优化领域中的经典问题之一。TSP的概念最早可以追溯到18世纪,瑞士数学家欧拉在解决柯尼斯堡七桥问题时首次提出了关于图中遍历的问题。不过,作为一个优化问题,TSP在19世纪才开始形成系统的研究。1920年代,TSP被德国数学家卡尔·孟格尔......
  • day09(网络编程基础)服务器模型
    目录服务器模型循环服务器并发服务器多进程多线程​​​​​​​IO多路复用​​​​​​​并发服务器总结服务器模型在网络通信中,通常一个服务器要连接多个客户端为了处理多个客户端的请求,通常有多种表现形式循环服务器一个服务器在同一时间只能处理一个客户......
  • 《深度学习》—— 神经网络基本结构
    前言深度学习是一种基于神经网络的机器学习算法,其核心在于构建由多层神经元组成的人工神经网络,这些层次能够捕捉数据中的复杂结构和抽象特征。神经网络通过调整连接各层的权重,从大量数据中自动学习并提取特征,进而实现预测或分类等任务。一、神经网络结构神经网络的基本组......
  • 最新24年计算机三级网络技术速过指南之校园网部署的解题方法与思路,包拿分教程
            多了不说少了不唠,直接进入主题。校园网分析这种体型,共15分,五个空,涉及到的考点有十余个,还有两道天选题。目录一、常规题型做题方法:    1.看题干提取要点    2.看图提取要点    3.看空的上下左右提取要点           ......
  • 网络流24题(8/24 待更新 码风良好可做代码参考)
    P2764最小路径覆盖问题建模方式拆所有点为入点和出点两部分,创建超级源点和超级汇点。连边:源点到所有入点边权值为1表示,每个点只进入一个流量,出点到汇点边权值也为1,表示出度也为1。然后对图求最大流。最小路径覆盖=总点数-最大流代码实现lln,m;structedge{  l......
  • 数帝网络:架桥修路, 携手用友为企业数智化“换挡提速” | 商业创新同行者
    “能用众力,则无敌于天下矣;能用众智,则无畏于圣人矣。”《三国志·吴志·孙权传》里有这样一句发人深省的名言。在当代的名人名言中,异曲同工的格言不胜枚举,甚至成为指导产业发展的路径。当前,“生态”、“体系”、“伙伴”等词汇,以及“软件定义一切”的理念,已经成为企业数智化转型的重......
  • 宝藏级Docker应用推荐(建议NAS/AllinOne用户收藏)
    梳理收集了个人比较常用的Docker应用,这些应用大多免费开源,能极大提高的提高日常工作效率,也能充分榨干家里闲置设备资源,比如NAS、个人PC、主机服务器等。一、家庭娱乐中心类家庭影音、漫画、小说等1、影视类Jellyfin、Emby(个人可以不开通专业版,免费版够用)推荐原因:看电影......