Ever

  • 首页
  • 系统
  • docker
  • k8s
  • 数据库
  • 运维
  • 更多
    • 其他
生活不只是眼前的苟且,还有诗和远方!
  1. 首页
  2. docker
  3. 正文

探索Docker网络配置和管理

2024年7月22日 327点热度 0人点赞 0条评论

1.docker网络类型类型有几种?

  1. none:
    • 作用: 不为容器创建网络接口,容器内部只有本地回环接口(lo)。
    • 适用场景: 对网络要求较低,容器不需要与外部或其他容器通信的场景。
    • 大白话:没有网卡,只有一个本地回环网卡lo。
  2. host:
    • 作用: 容器与宿主机共享网络命名空间,不会创建新的网络接口。
    • 优势: 最高的网络性能,容器直接使用宿主机的网络,无额外的网络地址转换。
    • 风险: 容器与宿主机的网络资源可能发生冲突,尤其是端口冲突。
    • 大白话:不会产生新的网络名称空间。直接使用宿主机的网络名称空间。效率极高。缺陷就是宿主机和监听端口和容器可能会存在冲突的风险。
  3. bridge:
    • 作用: 创建一个Linux网桥,容器连接到这个桥上,从而与宿主机的网络进行通信。
    • 适用场景: 多个容器需要与宿主机和其他容器通信时,使用桥接网络最为常见。
    • 大白话:桥接网卡,相当于VM的NAT网络,会产生一块新的网卡,会生成一对设备对,一端在容器里,另一端在宿主机上。
  4. container:
    • 作用: 与指定的已存在容器共享网络命名空间,即两个容器可以共享相同的网络配置和接口。
    • 适用场景: 需要实现一些特定的网络拓扑或者容器之间需要直接通信而不经过宿主机的场景。
    • 大白话:不会创建新的网卡,和指定的容器共享网络名称空间。
  5. custom:
    • 作用: 允许用户自定义网络配置,可以使用Docker网络插件来实现不同的网络驱动和设置。
    • 适用场景: 需要更复杂的网络拓扑或者特定网络策略的场景,比如多主机通信、跨云服务的容器通信等。
    • 大白话:自定义网络名称空间。

每种网络模式都有其适用的场景和特点,选择合适的网络模式可以根据容器的需求和安全性要求来决定。

2.自定义网络管理

1.查看网络信息

docker network ls

2.查看网络的详细信息

docker network inspect bridge

3.创建四种网络容器

docker run -id --name 1-none --network none alpine
docker run -id --name 2-host --network host alpine
docker run -id --name 3-bridge --network bridge alpine
docker run -id --name 4-container --network container:3-bridge alpine

 

4.查看容器运行状态

docker ps -a

3.none类型

  1. none:
    • 作用: 不为容器创建网络接口,容器内部只有本地回环接口(lo)。
    • 适用场景: 对网络要求较低,容器不需要与外部或其他容器通信的场景。

1.验证

查看容器状态

docker inspect 1-none

首先他是没有IP地址的

进入容器查看

docker exec -it 1-none sh

ifconfig

4.host类型

  1. host:
    • 作用: 容器与宿主机共享网络命名空间,不会创建新的网络接口。
    • 优势: 最高的网络性能,容器直接使用宿主机的网络,无额外的网络地址转换。
    • 风险: 容器与宿主机的网络资源可能发生冲突,尤其是端口冲突。

1.验证

docker exec -it 2-host sh

ifconfig

5. bridge类型

  • 作用: 创建一个Linux网桥,容器连接到这个桥上,从而与宿主机的网络进行通信。
  • 适用场景: 多个容器需要与宿主机和其他容器通信时,使用桥接网络最为常见。
  • 大白话:桥接网卡,相当于VM的NAT网络,会产生一块新的网卡,会生成一对设备对,一端在容器里,另一端在宿主机上。

1.验证

docker exec -it 3-bridge sh

ifconfig

桥接网卡,相当于VM的NAT网络,会产生一块新的网卡,会生成一对设备对,一端在容器里,另一端在宿主机上。

2.设备对

宿主机产生的

容器产生的

6. container类型

  • 作用: 与指定的已存在容器共享网络命名空间,即两个容器可以共享相同的网络配置和接口。
  • 适用场景: 需要实现一些特定的网络拓扑或者容器之间需要直接通信而不经过宿主机的场景。
  • 大白话:不会创建新的网卡,和指定的容器共享网络名称空间。

1.验证

docker exec -it 4-container sh

ifconfig

 2.详解

因为他指定的是 3-的所以他们两个用了同一个网络

7.科普下docker的网络名称空间

这些是 /proc/$$/ns 目录下的符号链接,每个符号链接代表了不同的 Linux 命名空间类型。下面解释每个的含义以及如何使用命令来查看它们:

cgroup (cgroup:[4026531835]):

含义: 控制组命名空间,用于限制和控制进程组的资源使用。
命令: 查看当前进程的 cgroup 命名空间:
ls -l /proc/$$/ns/cgroup
ipc (ipc:[4026531839]):

含义: 进程间通信命名空间,管理进程间通信资源如消息队列、信号量等。
命令: 查看当前进程的 ipc 命名空间:
ls -l /proc/$$/ns/ipc
mnt (mnt:[4026531840]):

含义: 挂载点命名空间,管理文件系统挂载点。
命令: 查看当前进程的挂载点命名空间:
ls -l /proc/$$/ns/mnt
net (net:[4026531992]):

含义: 网络命名空间,用于隔离网络设备、IP 地址等网络资源。
命令: 查看当前进程的网络命名空间:
ls -l /proc/$$/ns/net
pid (pid:[4026531836]):

含义: 进程命名空间,隔离进程 ID 号码。
命令: 查看当前进程的进程命名空间:
ls -l /proc/$$/ns/pid
pid_for_children (pid:[4026531836]):

含义: 为子进程指定的进程命名空间,Linux 内核版本 5.6 之后引入。
命令: 查看当前进程的进程命名空间(与 pid 相同):
ls -l /proc/$$/ns/pid_for_children
time (time:[4026531834]):

含义: 时间命名空间,隔离 clock_gettime 和 clock_settime 等时间操作。
命令: 查看当前进程的时间命名空间:
ls -l /proc/$$/ns/time
time_for_children (time:[4026531834]):

含义: 为子进程指定的时间命名空间,Linux 内核版本 5.6 之后引入。
命令: 查看当前进程的时间命名空间(与 time 相同):
ls -l /proc/$$/ns/time_for_children
user (user:[4026531837]):

含义: 用户命名空间,用于隔离用户 ID 和组 ID。
命令: 查看当前进程的用户命名空间:
ls -l /proc/$$/ns/user
uts (uts:[4026531838]):

含义: UTS 命名空间,用于隔离主机名和域名。
命令: 查看当前进程的 UTS 命名空间:
ls -l /proc/$$/ns/uts
每个命名空间都通过 /proc/$$/ns 目录下的符号链接表示,其中 $$ 是当前 Shell 或进程的 PID。这些命名空间用于实现 Linux 的进程隔离和资源管理,允许不同进程在各自独立的环境中运行。

标签: 暂无
最后更新:2024年7月22日

小杜

岁月静好,现世安稳。

打赏 点赞
< 上一篇
下一篇 >

文章评论

razz evil exclaim smile redface biggrin eek confused idea lol mad twisted rolleyes wink cool arrow neutral cry mrgreen drooling persevering
取消回复

归档

  • 2025 年 4 月
  • 2024 年 9 月
  • 2024 年 8 月
  • 2024 年 7 月
  • 2024 年 6 月
  • 2024 年 5 月
  • 2024 年 4 月
  • 2024 年 3 月

分类目录

  • docker
  • k8s
  • 数据库
  • 社交
  • 系统
  • 运维

COPYRIGHT © 2019 小杜. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang