前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Docker网络

Docker网络

作者头像
害恶细君
发布2022-11-22 14:08:41
4510
发布2022-11-22 14:08:41
举报
文章被收录于专栏:编程技术总结分享

从docker的架构和运行流程来看,Docker是一个C/S模式的架构,后端是一个松耦合架构,众多模块各司其职。

Docker运行的基本流程为:

1.用户是使用Docker Client 与 Docker Daemon建立通信,并发送请求给后者。 2.Docker Daemon 作为Docker架构中的主体部分,首先提供Docker Server的功能使其可以接受Docker Client的请求。 3.Docker Engine 执行Docker内部的一系列工作,每一项工作都是一个Job形式得存在。 4.Job得运行过程中,当需要容器镜像时,则从Docker Registry 中下载镜像,并通过镜像管理驱动Graph将下载的驱动以Graph的形式存储。 5.当需要为Docker创建网络环境时,通过网络管理驱动Network driver创建并配置Docker容器网络环境。 6.当需要限制Docker容器运行资源或执行用户指令等操作时,则通过Execdriver来完成。 7.Libcontainer是一项独立的容器管理包,Network driver以及Execdriver 都是通过Libcontainer来实现具体对容器的操作。

我们安装和运行docker后,运行ifconfig命令查看一下网络,会产生一个名为docker0的虚拟网桥:

我们查看一下docker网络模式:

代码语言:javascript
复制
docker network ls 

docker会默认创建3大网络模式。

下面来学习一下docker network的常用命令

命令不多,就那么几个。

查看网络的命令

代码语言:javascript
复制
docker network ls

查看网络数据源的命令:

代码语言:javascript
复制
docker network inspect xxx网络名称

删除网络的命令:

代码语言:javascript
复制
docker network rm xxx网络名称

案例:

好的,上面了解过docker的一些常用命令后,接下来就来看看docker network 能干什么?

所有网络的访问,要在同一网段。如果要做docker网络管理和容器调用之间的规划、容器间的互联和通信以及端口映射,就涉及到docker network的知识了。

网络模式

none和container几乎不会用,主要使用前两种。

容器实例内默认网络IP的生产规则:

  1. 先启动两个ubuntu容器实例
  1. docker inspect 容器ID or 容器名字

上面可以知道,目前的网络属于桥接网络,网关是127.0.0.1 ,u1的IP是127.0.0.2,u2的IP是127.0.0.3。

  1. 关闭u2实例,新建u3,查看ip变化

会发现u3的IP是127.0.0.3,这个地址不是之前u2的吗,居然变成了u3的IP地址。这说明了docker容器内部的IP是有可能发生改变的。

bridge模式 Docker 服务默认会创建一个 docker0 网桥(其上有一个 docker0 内部接口),该桥接网络的名称为docker0,它在内核层连通了其他的物理或虚拟网卡,这就将所有容器和本地主机都放到同一个物理网络。Docker 默认指定了 docker0 接口 的 IP 地址和子网掩码,让主机和容器之间可以通过网桥相互通信。

网桥docker0创建一对对等虚拟设备接口,一个叫veth,另一个叫eth0,成对匹配。

查看 bridge 网络的详细信息,并通过 grep 获取名称项

代码语言:javascript
复制
docker network inspect bridge | grep name
代码语言:javascript
复制
ifconfig | grep docker

host模式 直接使用宿主机的 IP 地址与外界进行通信,不再需要额外进行NAT 转换。他的网络就和主机的eth0(ens33)在同一个网络了。

问题:

代码语言:javascript
复制
 docke启动时总是遇见标题中的警告

原因:

代码语言:javascript
复制
docker启动时指定--network=host或-net=host,如果还指定了-p映射端口,那这个时候就会有此警告,

并且通过-p设置的参数将不会起到任何作用,端口号会以主机端口号为主,重复时则递增。

解决:

代码语言:javascript
复制
解决的办法就是使用docker的其他网络模式,例如--network=bridge,这样就可以解决问题,或者不指定端口映射,又或者直接无视。。O(∩_∩)O哈哈~
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-05-25,如有侵权请联系 cloudcommunity@tencent.com 删除

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器镜像服务
容器镜像服务(Tencent Container Registry,TCR)为您提供安全独享、高性能的容器镜像托管分发服务。您可同时在全球多个地域创建独享实例,以实现容器镜像的就近拉取,降低拉取时间,节约带宽成本。TCR 提供细颗粒度的权限管理及访问控制,保障您的数据安全。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档