13-Docker网络

简介: Docker网络详解:介绍bridge、host、none和container四种网络模式,原理及使用场景。通过自定义网络实现容器间服务名通信,替代已弃用的--link方式,提升可维护性与灵活性。

13-Docker网络

Docker 网络docker安装并启动服务后,会在宿主机中添加一个虚拟网卡。在Docker服务启动前,使用 ifconfig 或 ip addr 查看网卡信息:ens33或eth0:本机网卡lo:本机回环网络网卡可能有virbr0(CentOS安装时如果选择的有相关虚拟化服务,就会多一个以网桥连接的私网地址的virbr0网卡,作用是为连接虚拟网卡提供NAT访问外网的功能。如果要移除该服务,可以使用 yum remove libvirt-libs.x86_64)使用 systemctl start docker启动Docker服务后,会多出一个 docker0 网卡。作用:容器间的互联和通信以及端口映射容器IP变动时候可以通过服务名直接网络通信而不受到影响Docker容器的网络隔离,是通过Linux内核特性 namespace和 cgroup 实现的。docker网络命令查看Docker网络模式:

如果没有修改过docker network,则默认有3个网络模式:bridgehostnone添加Docker网络:删除Docker网络:查看网络元数据:删除所有无效的网络:Docker 网络模式Docker 的网络模式:

网络模式

简介

使用方式

bridge

为每一个容器分配、设置IP等,并将容器连接到一个docker0虚拟网桥,默认为该模式

--network bridge

host

容器将不会虚拟出自己的网卡、配置自己的IP等,而是使用宿主机的IP和端口

--network host

none

容器有独立的 Network namespace,但并没有对齐进行任何网络设置,如分配 veth pari 和 网桥连接、IP等

--network none

container

新创建的容器不会创建自己的网卡和配置自己的IP,而是和一个指定的容器共享IP、端口范围等

--network container:NAME或者容器ID

查看某个容器的网络模式:docker0Docker 服务默认会创建一个docker0网桥(其上有一个docker0内部接口),该桥接网络的名称为 docker0,它在内核层连通了其他的物理或虚拟网卡,这就将所有容器和本地主机都放到同一个物理网络。Docker默认指定了docker0接口的IP地址和子网掩码,让主机和容器之间可以通过网桥互相通信。查看bridge网络的详细信息,并通过grep获取名称:可以看到其名称为docker0。bridge模式Docker使用Linux桥接,在宿主机虚拟一个Docker容器网桥(docker0),Docker启动一个容器时会根据Docker网桥的网段分配给容器一个IP地址,称为Container-IP,同时Docker网桥是每个容器的默认网关。因为在同一个宿主机内的容器接入同一个网桥,这样容器之间就能够通过容器的Container-IP直接通信。docker run的时候,没有指定--network的话,默认使用的网桥模式就是bridge,使用的就是docker0。在宿主机ifconfig就可以看到docker0和自己create的network。网桥docker0创建一对对等虚拟设备接口,一个叫veth,另一个叫eth0,成对匹配:整个宿主机的网桥模式都是docker0,类似一个交换机有一堆接口,每个接口叫 veth,在本地主机和容器内分别创建一个虚拟接口,并让他们彼此联通(这样一对接口叫做 veth pair)。每个容器实例内部也有一块网卡,容器内的网卡接口叫做eth0。docker0上面的每个veth匹配某个容器实例内部的eth0,两两配对,一一匹配。例如:启动tomcat容器,进入tomcat容器后,执行 ip addr,可以看到其网卡信息:在宿主机执行 ip addr 查看宿主机网卡信息:host模式直接使用宿主机的 IP 地址与外界进行通信,不再需要额外进行 NAT 转换。容器将不会获得一个独立的 Network Namespace,而是和宿主机共用一个 Network space。容器将不会虚拟出自己的网卡,而是直接使用宿主机的 IP 和端口。如果在 docker run 命令中同时使用了 --network host 和 -p端口映射,例如:那么会出现一个警告:因为此时已经使用了host模式,本身就是直接使用的宿主机的IP和端口,此时的-p端口映射就没有了意义,也不会生效,端口号还是会以主机端口号为主。正确做法是:不再进行-p端口映射,或者改用bridge模式none模式禁用网络功能。在none模式下,并不为docker容器进行任何网络配置。进入容器内,使用 ip addr查看网卡信息,只能看到 lo(本地回环网络127.0.0.1网卡)。container模式新建的容器和已经存在的一个容器共享网络IP配置,而不是和宿主机共享。新创建的容器不会创建自己的网卡、IP,而是和一个指定的容器共享IP、端口范围。两个容器除了网络共享,其他的如文件系统、进程列表依然是隔离的。示例:此时使用 ip addr查看两台容器的网络,会发现两台容器的eth0网卡内的IP等信息完全相同。如果关掉了alpine1容器,因为alpine2的网络使用的alpine1共享网络,所以关掉alpin1后,alpine2的eth0网卡也随之消失了。自定义网络容器间的互联和通信以及端口映射。容器 IP 变动时候可以通过服务名直接网络通信而不受影响。(类似Eureka,通过服务名直接互相通信,而不是写死IP地址)。docker中还有一个 --link 进行容器网络互联,但是已经被标记为过时的,可能会在将来的版本中移除这个功能。推荐使用自定义网络替换link。自定义桥接网络(自定义网络默认使用的是桥接网络 bridge): 新建自定义网络

Shell

运行代码复制代码

1

docker network create tomcat_network

 查看网络列表

Shell

运行代码复制代码

1

docker network ls

 创建容器时,指定加入我们自定义的网络中

Shell

运行代码复制代码

1

2

3

docker run -d -p 8081:8080 --network tomcat_network --name tomcat1 tomcat:8.5-jdk8-corretto


docker run -d -p 8082:8080 --network tomcat_network --name tomcat2 tomcat:8.5-jdk8-corretto

 此时进入tomcat1中,使用ping命令测试连接tomcat2容器名,发现可以正常连通

Shell

运行代码复制代码

1

2

3

4

5

6

7

8

9

# 安装ifconfig命令

yum install -y net-tools

# 安装ip addr命令

yum install -y iproute

# 安装ping命令

yum install -y iputils


# 直接ping容器名,不需要ping IP地址

ping tomcat2

link连接示例:

Shell

运行代码复制代码

1

2

3

4

5

6

7

8

9

10

# 启动一台mysql容器

# --name 为容器指定一个别名

docker run --name mysql-matomo -p 3308:3306 -e MYSQL_ROOT_PASSWORD=root -d mysql:8.0.28


# 启动另一个容器,通过--link连接到mysql容器

# --link 容器名称:本容器连接对方时的别名

docker run -d -p 8888:80 --link mysql-matomo:db --name matomo matomo:4.9.0


# 此时,在matomo容器中,便可以通过 db 这个hostname连接到mysql-matomo容器,而无须再通过ip

# 连接地址:db:3306

相关文章
|
存储 Linux
Linux系统LVM信息丢失处理方法
Linux的LVM会存储用户对PV/VG/LV的每一步操作,并自动把当前的VG的信息备份到一个文件里面,该文件为/etc/lvm/backup/VG名,本文描述了当信息丢失时如何找回的处理方法。
11074 60
Linux系统LVM信息丢失处理方法
|
Kubernetes Linux Windows
kubectl 本地远程链接k8s多个集群,远程管控多集群,查看日志 部署服务(windows版)
kubectl 本地远程链接k8s多个集群,远程管控多集群,查看日志 部署服务(windows版)
1327 0
|
1月前
|
人工智能 Shell API
写一个你自己的Agent Skills
Agent Skills 是轻量级开放格式,通过 `SKILL.md` 定义可复用、可版本控制的AI技能模块,支持渐进式上下文加载,让智能体按需扩展能力——一次开发,多端部署,赋能个人、团队与企业高效构建专属AI工作流。(239字)
692 0
|
11月前
|
存储 缓存 人工智能
Mooncake 最新进展:SGLang 和 LMCache 基于 Mooncake 实现高效 PD 分离框架
Mooncake 的架构设计兼具高性能和灵活性,为未来的扩展性和生态建设奠定了坚实基础。
|
6月前
|
NoSQL 算法 Redis
【Docker】(3)学习Docker中 镜像与容器数据卷、映射关系!手把手带你安装 MySql主从同步 和 Redis三主三从集群!并且进行主从切换与扩容操作,还有分析 哈希分区 等知识点!
Union文件系统(UnionFS)是一种**分层、轻量级并且高性能的文件系统**,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtual filesystem) Union 文件系统是 Docker 镜像的基础。 镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。
749 6
|
6月前
|
缓存 边缘计算 监控
89_批量推理:异步API调用
在当今数据密集型应用和大模型部署的时代,批量推理已成为提升系统性能和资源利用率的关键技术。随着深度学习模型规模的不断扩大和应用场景的日益复杂,如何高效地处理大量推理请求成为技术团队面临的重要挑战。传统的同步API调用方式在面对高并发、大规模数据处理时,往往会遇到响应延迟高、资源利用不充分等问题。异步API调用作为一种更高效的处理模式,通过非阻塞操作和并发处理能力,为批量推理场景提供了理想的解决方案。
559 0
|
存储 人工智能 运维
少年云亮相联合国教科文组织,已向偏远地区捐赠200多所AI云教室
少年云亮相联合国教科文组织,已向偏远地区捐赠200多所AI云教室
|
存储 人工智能 缓存
Mooncake:月之暗面Kimi联合清华等机构推出的大模型推理架构
Mooncake是由月之暗面Kimi联合清华大学等机构共同开源的大模型推理架构。该架构以KVCache为中心,通过分布式设计和资源优化,显著提升了大模型推理的吞吐量和效率,同时降低了算力开销。Mooncake在长上下文场景中表现出色,支持多种应用场景,如自然语言处理、内容推荐系统和搜索引擎等。
1771 6
Mooncake:月之暗面Kimi联合清华等机构推出的大模型推理架构
|
Arthas 算法 Java
这5个GitHub项目+3个网站,助你一飞冲天!
这5个GitHub项目+3个网站,助你一飞冲天! 小伙伴们周末好呀,这次来更新一波学习资源啦~ 👍 之前推荐过一些书,这次我们就来看看 4ye 平时常关顾的一些学习网站叭!😋 (同时会更新在菜单栏的 宝藏资源 中,方便查找) 资源一览 image-20210807235820378 CyC2018 / CS-Notes 高达 136K star 的项目! 😄 📚 技术面试必备基础知识、Leetcode、计算机操作系统、计算机网络、系统设计 概览图 地址👉 github.com/CyC2018/CS-… ima
1192 0

热门文章

最新文章

下一篇
开通oss服务