Docker-07:Docker网络管理

简介: Docker容器的网络知识,自定义网络的配置

1. 目录

Docker

2. 概念

Docker 本身有4种网络工作模式,和一些自定义网络模式,在安装 Docker 时,默认会自动创建 bridgenonehost

  • Bridge:此模式会为每一个容器分配、设置IP等,并将容器连接到一个docker0虚拟网桥,通过docker0网桥以及Iptables nat表配置与宿主机通信。
  • None:该模式关闭了容器的网络功能。
  • host:容器将不会虚拟出自己的网卡,配置自己的IP等,而是使用宿主机的IP和端口。
  • Container模式:使用 --net=container:NAME_or_ID 指定。

2.1. 默认网络

Docker 时,它会自动创建上面的三个网络。如果需要指定某种网络,则用 --network 标志来指定。

2.2. Host

类似虚拟机 Vmware 中的桥接模式,即容器和宿主机在同一个网络中,但没有独立 IP 地址。这是因为 Docker 使用 LinuxNamespaces 技术来进行资源隔离,一个 Docker 容器一般会分配一个独立的 Network Namespace,但是因为使用的是 host 模式,此容器将不会获得一个独立的 Network Namespace ,而是和宿主机共用一个 Network Namespace。所以容器将不会虚拟出自己的网卡,配置自己的IP等,而是使用宿主机的IP和端口。

2.3. None

该模式关闭了容器的网络功能,旨在说明容器并不需要网络。

2.4. Bridge

相当于 Vmware 中的 Nat 模式,容器使用独立 Network Namespace ,并连接到 docker0 虚拟网卡(默认模式)。通过 docker0 网桥以及 Iptables nat 表配置与宿主机通信。

2.5. Container

概念类似 host 模式, Container 模式指定新构建的容器和同已存在容器共享一个 Network Namespace ,而不是和宿主机共享IP、端口范围等。这样,两个容器除网络方面,其他的如文件系统、进程列表等还是隔离的。

3. 环境准备

我通过在 Windows 10 操作系统的虚拟机,安装的 CentOS 7.0CentOS 是最小安装版,安装后需要将服务器内核和补丁全部更新一遍。

CentOS 安装 Docker 后,可以查看 Docker 版本为 20.10.17 ,截止当前是 Docekr 社区版当中的最新版本。

  • Windows 10 Home 64bit
  • VMware Workstation Pro 16
  • CentOS 7.0
  • docker 20.10.17

4. 自定义网络

构建容器,默认使用 bridge 模式,构建命令中默认有 --net bridge ,创建网络避开 bridge 名字,因为这是 docker0 的名字。

docker network create 的基本命令如下:


Flag shorthand -h has been deprecated, please use --help

Usage:  docker network create [OPTIONS] NETWORK

Create a network

Options:
      --attachable           Enable manual container attachment
      --aux-address map      Auxiliary IPv4 or IPv6 addresses used by Network driver (default map[])
      --config-from string   The network from which to copy the configuration
      --config-only          Create a configuration only network
  -d, --driver string        Driver to manage the Network (default "bridge")
      --gateway strings      IPv4 or IPv6 Gateway for the master subnet
      --ingress              Create swarm routing-mesh network
      --internal             Restrict external access to the network
      --ip-range strings     Allocate container ip from a sub-range
      --ipam-driver string   IP Address Management Driver (default "default")
      --ipam-opt map         Set IPAM driver specific options (default map[])
      --ipv6                 Enable IPv6 networking
      --label list           Set metadata on a network
  -o, --opt map              Set driver specific options (default map[])
      --scope string         Control the network's scope
      --subnet strings       Subnet in CIDR format that represents a network segment

4.1. 创建

4.1.1. 创建网络

基于 bridge 模式创建名称为 bridge_nww 的网络。


docker network create -d bridge bridge_nww

4.1.2. 创建容器

创建一个容器,使用上述所创建的网络。


docker run -d -it --name clone_new --network bridge_nww clone-boot

docker network inspect bridge_nww 查看下网络使用情况。


[
    {
        "Name": "bridge_nww",
        "Id": "90eb654cb702b85fc8af44ced8121f06f284dc16d57b45dbff66648885582729",
        "Created": "2022-08-27T22:42:19.07173123-04:00",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": {},
            "Config": [
                {
                    "Subnet": "172.22.0.0/16",
                    "Gateway": "172.22.0.1"
                }
            ]
        },
        "Internal": false,
        "Attachable": false,
        "Ingress": false,
        "ConfigFrom": {
            "Network": ""
        },
        "ConfigOnly": false,
        "Containers": {
            "a8d257e00caefe4624fba5effbd67ae90ee46dc95793e877313fbc7cef814dd5": {
                "Name": "clone_new",
                "EndpointID": "e7dc1dfb4d0ff05ed02619f2eabd2217665bdd9500e9d64eb13753b5f9f2ec8b",
                "MacAddress": "02:42:ac:16:00:02",
                "IPv4Address": "172.22.0.2/16",
                "IPv6Address": ""
            }
        },
        "Options": {},
        "Labels": {}
    }
]

Containers 中有我们的构建的容器。

4.1.3. 自定义Ping

自己创建网络可以直接使用容器名来互 Ping ,比如我有一个 Redis 的集群,就可以搭一个网络。网络之间是互相隔离的,不同集群使用不同网络。


docker exec -it ${容器1} ping ${容器2}

4.2. 网络之间通信

先用默认 Bridge 模式创建两个容器 ct1ct2 ,新构建一个新的网络工作模式 bridge_ct, 再构建一个使用 bridge_ct 网络的 ct3

  • 默认模式

docker run -itd --name ct1 wentos:7.0 /bin/bash
docker run -itd --name ct2 wentos:7.0 /bin/bash
  • 自定义模式

docker network create -d bridge bridge_ct 
docker run -itd --name ct3 --network bridge_ct wentos:7.0 /bin/bash
  • 添加网络模式

docker network connect bridge_ct ct2
  • 查看网络IP

后面我们依次登录 ct1ct2ct3 ,使用 docker attach ct1 命令,罗列出来各他们的 ip 信息。

名称 ip 网络
ct1 172.17.0.3 bridge
ct2 172.17.0.5、172.23.0.3 bridge
ct3 172.23.0.2 bridge、 bridge_ct
  • 验证结果

    • 在容器 ct2ct1 可以互相 ping

20220828153958

  • 在容器 ct2ct3 可以互相 ping

20220828153929

  • 在容器 ct1ct3 可以是无法通信的

4.3. 结论

不同容器间需相互通信,须在同一个网络环境下;使用默认 bridge 网络管理的容器可以使用容器IP进行通信,但无法使用容器名称进行通信;而使用自定义网络管理的容器则可以使用容器IP进行通信

目录
相关文章
|
3天前
|
缓存 网络协议 网络架构
Docker 网络 IP 地址冲突,就该这么处理!
Docker 网络 IP 地址冲突,就该这么处理!
|
3月前
|
关系型数据库 MySQL 网络安全
Docker部署MySQL,2024网络安全通用流行框架大全
Docker部署MySQL,2024网络安全通用流行框架大全
|
2天前
|
网络协议 Linux 网络安全
遇到Docker容器网络隔断?揭秘六种超级实用解决方案,轻松让Docker容器畅游互联网!
【8月更文挑战第18天】Docker容器内网络不通是开发者常遇问题,可能因网络配置错、Docker服务异常或防火墙阻碍等原因引起。本文提供六种解决策略:确认Docker服务运行状态、重启Docker服务、检查与自定义Docker网络设置、验证宿主机网络连接、临时禁用宿主机IPv6及检查防火墙规则。通过这些步骤,多数网络问题可得以解决,确保容器正常联网。
9 1
|
28天前
|
JSON 数据格式 Docker
Docker 网络命令大全,建议收藏!
【7月更文挑战第22天】
66 7
Docker 网络命令大全,建议收藏!
|
8天前
|
监控 安全 虚拟化
Docker技术概论(5):Docker网络
Docker技术概论(5):Docker网络
41 6
|
1天前
|
Docker 容器
在Docker中,网络模式有哪些?
在Docker中,网络模式有哪些?
|
5天前
|
Docker 容器
Docker - 网络模式与容器网络互连
Docker的网络模式包括桥接模式、主机模式和覆盖网络模式,以及如何通过Docker的网络操作命令实现容器网络互连。
14 0
|
1月前
|
安全 网络协议 云计算
Docker容器网络配置详解
【7月更文挑战第16天】Docker的网络配置是实现容器间以及容器与外部网络通信的基础。通过选择合适的网络模式和配置选项,可以构建高效、安全、可扩展的Docker网络解决方案。
|
13天前
|
Ubuntu Linux Docker
基于consul实现docker跨主机网络通信
基于consul实现docker跨主机网络通信
|
13天前
|
负载均衡 网络协议 Linux
基于weave实现docker跨主机网络通信
基于weave实现docker跨主机网络通信