Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >Docker 入门之网络

Docker 入门之网络

作者头像
菜菜cc
发布于 2022-11-15 13:36:20
发布于 2022-11-15 13:36:20
44000
代码可运行
举报
运行总次数:0
代码可运行

Docker 网络使用了 Linux 的 network namespace 机制,隔离了网络设备, ip 协议栈,路由表以及防火墙规则。

默认网络模式

每一个安装了 Docker 的 Linux 主机都会创建一个名为 docker0 的虚拟网桥,该虚拟网桥作为所有容器的默认网关。

在默认的网络模式下,虚拟网桥的工作方式和物理交换机类似,主机上的所有容器通过 docker0 连接在了一个二层网络中。

每启动一个容器,Docker 都会创建一个虚拟网卡, 并根据 Docker 网桥所在的网段来分配给容器一个未使用的 ip 地址,称之为容器 ip。在宿主机和容器内分别创建了一个虚拟接口,它们彼此连通,这对接口称之为 veth pair。

默认情况下的网络模式称之为 bridge 模式,该模式为 docker 的默认模式。在启动 docker 时可以使用--net指定容器的网络模式

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo docker run -it --net=bridge -p 9001:6379 redis:alpine

bridge 模式的网络转发如下图所示

四种网络模式

除了 brideg 模式,docker 还支持 container, host, none 模式

网络模式

配置

说明

bridge

--net=bridge

默认模式

container

--net=container:name或id

容器和另外一个容器共享 network namespacek8s 中的 pod 就是多个容器共享一个 network namespace

host

--net=host

容器和宿主机共享 network namespace

none

--net=none

不配置网络,用户可以稍后进入容器,自行配置

自定义网络

默认主机中创建了三个网络, 可通过network ls命令查看

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo docker network ls

用户可通过network create命令创建自定义网络

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 创建自定义网络 指定 bridge 模式,网段为 192.168.0.0/16, 网关为 192.168.0.0/16, 命名为 mynet
sudo docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet

启动容器可以指定连接到自定义网络

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 启动两个 redis 容器,分别命名为 redis1, redis2
sudo docker run -it -d --name redis1 -P --net mynet redis:alpine
sudo docker run -it -d --name redis2 -P --net mynet redis:alpine

通过network inspect命令可以查看一个网络的详情

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 查看 mynet 网络详细信息,参数为网络 id 或网络名,参数可通过 network ls 命令查到
sudo docker inspect e37aeda5814a

可以看到该网络下连接了两个容器

在以前可使用 --link 参数来使容器互联,但在自定义网络下默认就可以使用容器名进行容器的互联,内部已经维护好了容器名和 ip 的对应关系

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 在 redis1 容器中访问 redis2 容器
sudo docker exec -it redis1 ping redis2

注:默认的 bridge 网络不支持通过容器名进行互联

默认情况下两个网络是隔离的,如果需要让两个网络下的容器能够互相访问,可以使用network connect命令将容器连接到另一个网络

在默认的 bridge 网络下创建一个 redis3 容器用于演示

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo docker run -it -d -P --name redis3 --net bridge redis:alpine

默认情况下,两个不同网络的容器无法访问

将 redis3 容器加入到 mynet 网络中

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# docker network connect 网络名或id 容器名或id
sudo docker network connect mynet redis3

加入后就可以成功访问了

查看 mynet 网络信息和 ip 信息后发现,redis3 容器被分配了一个 mynet 的网络接口和 ip 地址

本文作者: Ifan Tsai  (菜菜)

本文链接: https://cloud.tencent.com/developer/article/2164601

版权声明: 本文采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。转载请注明出处!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-07-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
docker:了解docker网络和自定义docker网卡
所有容器不指定网络的情况下,都是docker0路由的,doucker会给我们的容器分配一个默认的可用IP
冷环渊
2021/11/10
9390
Docker 网络
当你安装Docker时,它会自动创建三个网络,bridge(创建容器默认连接到此网络)、 none 、host
Java_慈祥
2024/08/06
1580
Docker 网络
Docker 网络配置
(1)容器间、容器与主机间的互联和通信以及端口映射 (2)容器IP变动时候,可以通过服务名直接网络通信而不受到影响
为为为什么
2024/08/01
3060
Docker 网络模型
单机容器内的通信是通过 docker 自带的网桥连接互通的,如果是集群,那么做这些单机网络模型就行不通了,因为集群必然会将一个服务的多个任务需要分布到不同的机器上进行部署,因为如果把所有的任务都分配到一台机器部署了,这台服务器有故障,就会导致这个服务不能正常运行了,而且一个集群内,不同主机之间的容器是怎么进行通信的呢,这里我们就涉及到 docker 网络模型。
张乘辉
2020/05/07
9170
Docker高级篇笔记(九)Docker网络详细学习
我们没有开启docker,直接在虚拟机里面使用命令,ifconfig 我们可以看到
一写代码就开心
2022/05/09
5660
Docker高级篇笔记(九)Docker网络详细学习
docker的网络_docker网络模式详解
Docker默认提供了3种网络模式,生成容器时不指定网络模式下默认使用bridge桥接模式。 使用命令查看当前Docker所有的网络模式。
全栈程序员站长
2022/11/15
8630
docker的网络_docker网络模式详解
【Docker 系列】docker 学习八,Docker 网络
我们发现有一个docker0,是因为我们的宿主机上面安装了docker 的服务,docker 会给我生成一个虚拟网卡,图中的这个 docker0就是虚拟网卡信息
阿兵云原生
2023/02/16
1.1K0
Docker网络
细心的同学,可能发现,tomcat01的网络地址是172.17.0.2,而docker0的网络地址是172.17.0.1,由此可以得出它们在同一个网段!
李昂君
2021/12/24
5180
Docker网络
Docker网络
此前在Docker入门中,我们实现了软件的快速部署,和自定义镜像的制作,而为了实现多容器之间的通信,Docker网络就必须要安排上了
打铁读书郎
2024/04/11
1270
Docker网络
Docker 网络必知
在深入了解 Docker 之前,我们需要明确容器是如何在网络上进行通信的。Docker 网络是一个非常重要的主题,因为它决定了容器如何相互通信,以及容器如何与外部网络交互。在这篇文章中,我们将探讨 Docker 网络的几个关键概念,并通过实例来加深理解。
希里安
2024/01/02
3100
Docker 网络必知
Docker网络模式详解
当我们完成docker engine的安装以后,docker会在每一个engine上面生成一个3种网络,他们是:bridge, none还有host。
Tinywan
2019/07/16
4.7K0
docker(网络)
我们每启动一个docker容器,docker就会给docker容器分配一个ip,我们只要按照了docker,就会有一个docker0桥接模式,使用的技术是veth-pair技术!
崔笑颜
2020/11/03
5050
docker(网络)
Docker网络——单host网络
前言 前面总结了Docker基础以及Docker存储相关知识,今天来总结一下Docker单主机网络的相关知识。毋庸置疑,网络绝对是任何系统的核心,他在Docker中也占有重要的作用。同样本文基于CloudMan的系列教程。感谢ColudMan无私分享。 一、Docker默认网络 在新安装docker的主机上执行 docker network ls 便能看到docker默认安装的所有网络,分别是none网络、host网络和bridge网络。 1.1 none 网络 none网络就是什么都没有的网络。挂在这个网
魏守峰
2018/04/28
2.7K0
docker五种特性_k8s docker 关系
我们只要安装了Docker,就会有一个网卡Docker0(x.x.x.1) 我们每启动一个容器.Docker都会为这个容器分配一个ip地址
全栈程序员站长
2022/09/22
4230
docker五种特性_k8s docker 关系
Docker网络
1.我们每启动一个docker容器,docker就会给docker容器分配一个ip,我们只要安装了docker就会有一个网卡docker0
大忽悠爱学习
2021/11/19
3630
Docker网络模式
Docker网络作用:容器间的互联和通信以及端口映射,容器IP变动时候可以通过服务名直接网络通信而不受到影响
鱼找水需要时间
2023/02/16
4620
Docker网络模式
Docker 实践经验(六):Docker 网络
docker 启动之前(具体 ip 就不必看了,我 docker 关不掉了。。。):
看、未来
2022/05/06
4930
Docker 实践经验(六):Docker 网络
Docker网络
  Docker 服务默认会创建一个 docker0 网桥(其上有一个 docker0 内部接口),该桥接网络的名称为docker0,它在内核层连通了其他的物理或虚拟网卡,这就将所有容器和本地主机都放到同一个物理网络。Docker 默认指定了 docker0 接口 的 IP 地址和子网掩码,让主机和容器之间可以通过网桥相互通信。
别团等shy哥发育
2023/02/25
6960
Docker网络
Docker从入门到精通(十)
在该模式中,Docker 守护进程创建了一个虚拟以太网桥 docker0,新建的容器会自动桥接到这个接口,附加在其上的任何网卡之间都能自动转发数据包。
小土豆Yuki
2023/09/02
2300
Docker从入门到精通(十)
Docker | 自定义网络(网关、子网地址)
热爱前端,也喜欢专研各种跟本职工作关系不大的技术,技术、产品兴趣广泛且浓厚,等待着一个创业机会。本号主要致力于分享个人经验总结,希望可以给一小部分人一些微小帮助。
甜点cc
2022/10/24
9000
Docker | 自定义网络(网关、子网地址)
相关推荐
docker:了解docker网络和自定义docker网卡
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验