Docker网络——实现容器间通信、容器与外网通信以及容器的跨主机访问

前言

自定义网络

建议使用自定义的网桥来控制哪些容器可以相互通信,还可以自动DNS解析容器名称到IP地址。Docker提供了创建这些网络的默认网络驱动程序,你可以创建一个新的Bridge网络,Overlay或Macvlan网络。你还可以创建一个网络插件或远程网络进行完整的自定义和控制。

你可以根据需要创建任意数量的网络,并且可以在任何给定时间将容器连接到这些网络中的零个或多个网络。此外,您可以连接并断开网络中的运行容器,而无需重新启动容器。当容器连接到多个网络时,其外部连接通过第一个非内部网络以词法顺序提供。

一、容器间通信

1.创建一个bridge模式的网络

[root@server1 ~]# docker network create --driver bridge my_net1

在这里插入图片描述
由上图我们可以看到创建的网络ID为88cd89998134,使用ip addr查看本机网络:
在这里插入图片描述
查看docker自定义网络如下图,当我们创建好自定义网络后,自定为起分配IP网段和网关

docker network inspect my_net1 

在这里插入图片描述

docker的bridge自定义网络之间默认是有域名解析的;
docker的bridge自定义网络与系统自带的网桥之间默认是有解析的;
但是docker的系统自带的网桥之间默认是没有解析的。

2.再创建一个bridge的网络,自定义ip和网关

[root@server1 ~]# docker network create --driver bridge --subnet 172.20.0.0/24 --gateway 172.20.0.1 my_net2
f81bcce7691795311aadeb0815295c9ef5ac240b86bcc1317777734cfc83319a
[root@server1 ~]# 
[root@server1 ~]# docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
bc0331260bb7        bridge              bridge              local
2da931af3f0b        host                host                local
88cd89998134        my_net1             bridge              local
f81bcce76917        my_net2             bridge              local
63d31338bcd9        none                null                local
[root@server1 ~]# 
[root@server1 ~]# docker network inspect my_net2

        "IPAM": {
            "Driver": "default",
            "Options": {},
            "Config": [
                {
                    "Subnet": "172.20.0.0/24",
                    "Gateway": "172.20.0.1"
                }
            ]
        },

[root@server1 ~]# ip a
9: br-f81bcce76917: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN 
    link/ether 02:42:03:a3:1c:fb brd ff:ff:ff:ff:ff:ff
    inet 172.20.0.1/24 brd 172.20.0.255 scope global br-f81bcce76917
       valid_lft forever preferred_lft forever

3.使用刚刚创建的网络建立容器

[root@server1 ~]# docker load -i ubuntu.tar 

[root@server1 ~]# docker run -it --name vm1 --network=my_net1 ubuntu
root@b9186e3ba2e6:/# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
10: eth0@if11: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 
    link/ether 02:42:ac:12:00:02 brd ff:ff:ff:ff:ff:ff
    inet 172.18.0.2/16 brd 172.18.255.255 scope global eth0
       valid_lft forever preferred_lft forever
root@b9186e3ba2e6:/# 

在这里插入图片描述

4.另开一个shell,再创建一个容器,使用网络my_net2

##使用–ip参数可以指定容器ip地址,但必须是在自定义网桥上(自定义的ip地址和网关地址),
默认的bridge模式不支持,同一网桥上的容器是可以通信的

[root@server1 ~]# docker run -it --na
### Docker 网络架构 Docker网络模型基于 Linux 内核特性,提供了多种类型的网络配置来满足不同场景下的需求。每种网络模式都有其特定的功能和适用范围。 #### 默认桥接网络 Bridge Network 默认情况下,当启动一个新的容器时如果没有指定其他选项,默认会加入名为 `bridge` 的默认网桥中[^1]。此网桥由 Docker 自动创建,在宿主机内部形成一个独立的二层广播域,类似于物理世界中的局域网环境。所有连接至该网桥的容器可以相互通,而部无法直接访问它们除非做了端口映射设置。 ```bash docker network ls ``` 上述命令可以帮助查看当前存在的各种网络列表,其中包括默认 bridge 网络以及其他自定义网络。 #### 主机网络 Host Network 对于某些特殊应用场景下可能希望容器直接使用宿主机本身的 IP 地址空间而不经过 NAT 转换,则可以选择 host 模式的网络栈[^2]。此时容器不再拥有自己单独分配给它的私有IP地址;相反,它将完全依赖于所在节点所提供的公共接口来进行数据包收发操作。 #### 容器间通信 Container Communication 为了让多个容器能更加高效便捷地交互息,除了利用前述两种基本形式还可以借助用户自定义 overlay 或者 macvlan 类型的新建逻辑拓扑结构[^3]。特别是前者非常适合跨多台机器组成的集群环境中实现大规模分布式系统的部署运维管理任务。 - **Overlay Networks**: 支持跨越多个 Docker Daemon 实例之间的容器互访请求处理能力; - **MacVLAN Networks**: 可以为每一个参其中的工作单元赋予独一无二的真实MAC硬件标识符以便更好地模拟传统以太网行为特征。 关于底层工作机制方面,可以把整个过程想象成是在数据中心里把若干服务器接入同一台交换设备一样简单直观——即各个实例均挂载到了位于宿主操作系统之上的一张虚拟化的 docker0 接口卡上完成最终的数据转发流程控制[^4]。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值