Docker的网络模式

本文介绍了Docker的四种网络模式:Bridge桥接模式是默认模式,通过NAT转换使容器对外提供服务;Host模式下,容器与宿主机共享网络名称空间,容器IP即宿主机IP;Container模式允许容器间共享网络环境,能用localhost通信;None模式则不提供任何网络环境,容器只能使用loopback设备。

一、Bridge桥接模式
  bridge网络模式是Docker容器的默认网络模式,它可以使用一个Linux bridge设备,默认为docker0;利用veth0,一头连接在容器的网络namespace中,另一头在docker0上,互相连接来进行通信,在该模式下Docker Container不具有一个公有IP,因为宿主机的IP地址与veth pair的ip地址不在同一网段内;Docker采用NAT转换的方式,将容器内部的服务监听的端口与宿主机的某一个端口进行"绑定",使得宿主机以外的世界可以主动将网络报文发送至容器内部,外界访问容器内的服务时,需要访问宿主机的IP以及宿主机的端口。
  在这里插入图片描述

# 查看网络模式信息
[root@docker ~]# docker network  ls 
NETWORK ID          NAME                DRIVER              SCOPE
2448303ed0fc        bridge              bridge              local
583184b1f8e0        harbor_harbor       bridge              local
ff35fa4400e4        host                host                local
1af23f0e55b5        none                null                local


# 查看bridge桥接模式的网络信息
[root@docker ~]# docker inspect network bridge 
[
    {
        "Name": "bridge",
        "Id": "2448303ed0fc762762aa15214cbf802d0d3032521f88e3cc46054093fcb18249",
        "Created": "2019-09-28T14:51:41.530125413+08:00",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": null,
            "Config": [
                {
                    "Subnet": "172.17.0.0/16",
                    "Gateway": "172.17.0.1"
                }
            ]
        },
        "Internal": false,
        "Attachable": false,
        "Ingress": false,
        "ConfigFrom": {
            "Network": ""
        },
        "ConfigOnly": false,
        "Containers": {},
        "Options": {
            "com.docker.network.bridge.default_bridge": "true",
            "com.docker.network.bridge.enable_icc": "true",
            "com.docker.network.bridge.enable_ip_masquerade": "true",
        
### Docker 网络模式详解及配置方法 #### 1. **Bridge 模式** 这是 Docker 默认的网络模式。当启动一个容器时,如果没有显式指定 `--network` 参数,则会自动使用 Bridge 模式[^2]。在这种模式下,Docker 守护进程会在主机上创建一个名为 `docker0` 的虚拟网桥,并为每个容器分配独立的 IP 地址和子网掩码。 - 配置方式: ```bash docker run --network=bridge <image_name> ``` 这种模式适合大多数场景下的应用部署需求,因为它提供了良好的隔离性和灵活性。 --- #### 2. **Host 模式** 在 Host 模式下,容器不会被分配单独的网络命名空间,而是共享宿主机的操作系统网络栈。这意味着容器内的服务可以直接绑定到宿主机的真实接口地址,而无需 NAT 或端口映射操作。 - 配置方式: ```bash docker run --network=host <image_name> ``` 需要注意的是,在此模式下运行的应用可能会与其他正在监听相同端口号的服务发生冲突。 --- #### 3. **None 模式** 如果希望完全屏蔽掉某个特定容器对外部世界的访问能力,可以选用 None 模式。此时除了 loopback 接口外不会再有其他任何形式的联网支持存在[^4]。 - 配置方式: ```bash docker run --network=none <image_name> ``` 用户需手动完成所有的必要设置比如添加额外物理适配器或者调整路由表项等工作才能让此类实例重新获得连通性。 --- #### 4. 自定义 Overlay/Custom Networks (User-defined networks) 为了实现更复杂的跨节点集群环境中的多台机器之间相互协作的需求, 可以考虑构建自定义overlay类型的逻辑拓扑结构来满足实际业务情况的要求[^3]. 这种高级别的抽象层允许不同主机上的多个容器彼此透明地交换数据包而不必关心底层具体的传输细节. - 创建一个新的覆盖型网络: ```bash docker network create -d overlay my_overlay_network ``` 之后就可以像平常一样把新产生的资源关联至目标镜像文件之上啦! --- ### 总结 每种 docker 网络模型都有其独特之处以及适用范围。对于简单的单机测试用途来说 bridge 已经足够强大;而对于追求极致性能表现又不想牺牲太多安全性的朋友而言 host 则是个不错的选择;最后当我们面临分布式计算框架搭建难题的时候不妨试试看 user defined ones 吧!
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值