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进行通信

目录
相关文章
|
29天前
|
存储 安全 数据安全/隐私保护
Docker进阶:网络配置与服务编排
【10月更文挑战第17天】随着微服务架构的流行,Docker作为容器化技术的领导者,在企业级应用部署中扮演着重要角色。掌握Docker的高级特性,特别是网络配置和服务编排,对于构建高效、可维护的分布式系统至关重要。本文将深入探讨Docker的网络配置选项、容器间通信机制、端口映射技术以及使用Docker Compose进行多容器应用部署的最佳实践。
52 8
|
1月前
|
Docker 容器
docker中默认桥接网络
【10月更文挑战第7天】
116 62
|
25天前
|
Docker 容器
docker swarm启动服务并连接到网络
【10月更文挑战第16天】
22 5
|
25天前
|
调度 Docker 容器
docker swarm创建覆盖网络
【10月更文挑战第16天】
16 5
|
26天前
|
负载均衡 应用服务中间件 数据安全/隐私保护
docker swarm 创建 Swarm 模式下的网络
【10月更文挑战第14天】
24 6
|
26天前
|
负载均衡 网络协议 关系型数据库
docker swarm 使用网络启动服务
【10月更文挑战第15天】
23 4
|
26天前
|
应用服务中间件 nginx Docker
docker swarm创建覆盖网络
【10月更文挑战第14天】
17 3
|
26天前
|
数据安全/隐私保护 Docker 容器
docker swarm创建网络
【10月更文挑战第15天】
10 1
|
26天前
|
Docker 容器
docker swarm 在服务中使用网络
【10月更文挑战第14天】
17 2
|
10天前
|
Docker 容器
【赵渝强老师】Docker的None网络模式
Docker容器在网络方面实现了逻辑隔离,提供了四种网络模式:bridge、container、host和none。其中,none模式下容器具有独立的网络命名空间,但不包含任何网络配置,仅能通过Local Loopback网卡(localhost或127.0.0.1)进行通信。适用于不希望容器接收任何网络流量或运行无需网络连接的特殊服务。