9.docker入门到精通—Docker网络
创始人
2025-05-31 22:22:10
0

Docker启动时会在主机上自动创建一个docker0网桥,即一个Linux网桥。容器借助网桥和主机或者其他容器进行通讯。

1.docker启动与不启动时的网络情况

一:不启动docker时

  • ens33是宿主机ip

可以发现是在同一网段

  • lo是回环链路网络

  • virbr0

当选择虚拟化相关的服务后,启动网卡时就会有一个网桥连接的私网地址virbr0网卡(有一个固定的ip地址192.168.122.1),是做虚拟网桥使用的,其作用是连接虚拟机上的虚拟网卡,提供NAT访问外网的功能。

二:启动docker时

会产生一个名为docker0的虚拟网桥

2.docker网络的相关命令

查看docker网络的相关命令

docker network --help
 docker network ls                     查看网络
docker network create 网络名           创建网络
docker network connect 网络名          为容器连接到网络
docker network disconnect 网络名       断开容器的网络
docker network inspect 网络名          查看网络源数据
docker network rm 网络名字             删除网络
docker network prune                  删除所有无用的网络

3.docker网络的作用

  • 容器间的互联和通信以及端口映射

  • 容器IP变动时候可以通过服务名直接网络通信而不受到影响

4.docker网络模式

4.1 docker网络模式分类

查看bridge网桥

docker network inspect bridge

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

1 先启动两个ubuntu容器实例

docker run -it--name u1 ubuntu bash
docker run -it--name u2 ubuntu bash

2 查看容器ip

docker inspect 容器ID or 容器名字
eg: docker inspect u3 | tail -n20

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

docker rm-f u2
docker run -it--name u3 ubuntu bash

【结论】: docker 容器内部的 ip 是有可能会发生改变的

4.3 案例说明

4.3.1 bridge

是什么?

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

# 查看 bridge 网络的详细信息,并通过 grep 获取名称项
docker network inspect bridge | grep name

在宿主机内通过【ip addr|tail -8】查看:

新建两个tomcat实例,进入容器内【ip addr】查看:

docker run -d-p8081:8080 --name tomcat81 billygoo/tomcat8-jdk8
docker run -d-p8082:8080 --name tomcat82 billygoo/tomcat8-jdk8

4.3.2 host

是什么?

直接使用宿主机的 IP 地址与外界进行通信,不再需要额外进行NAT 转换。

容器将不会获得一个独立的Network Namespace,而是和宿主机共用一个Network Namespace。容器将不会虚拟出自己的网卡而是使用宿主机的 IP 和端口。

新建tomcat3实例:

docker run -d-p8083:8080 --network host --name tomcat83 billygoo/tomcat8-jdk8

问题:

docke 启动时总是遇见标题中的警告

原因:

docker 启动时指定--network=host 或-net=host,如果还指定了-p 映射端口,那这个时候就会有此警告,并且通过-p 设置的参数将不会起到任何作用,端口号会以主机端口号为主,重复时则递增。

解决:

解决的办法就是使用 docker 的其他网络模式,例如--network=bridge,这样就可以解决问题,或者直接无视

正确方式(不指定端口):

先删除tomcat83,再重新启动:
docker rm-f tomcat83
docker run -d           --network host --name tomcat83 billygoo/tomcat8-jdk8

无之前的配对显示了,看容器实例内部

docker inspect tomcat84|tail -n20

没有设置-p 的端口映射了,如何访问启动的 tomcat83??

在 CentOS 里面用默认的火狐浏览器访问容器内的tomcat83 看到访问成功.

http://宿主机 IP:8080/
eg: http://192.168.3.15:8080/

4.3.3 none

禁用网络功能,只有 lo 标识(就是 127.0.0.1 表示本地回环)

在none模式下,并不为Docker容器进行任何网络配置。 
也就是说,这个Docker容器没有网卡、IP、路由等信息,只有一个lo,需要我们自己为Docker容器添加网卡、配置IP等。

案例:

docker run -d-p8084:8080 --network none --name tomcat84 billygoo/tomcat8-jdk8

进入容器内部查看

 [root@localhost ~]# docker exec -it tomcat84 bash
root@bd397fc27e22:/usr/local/tomcat# ip addr

在容器外部查看

[root@localhost ~]# docker inspect tomcat84|tail -n 20

4.3.4 container

新建的容器和已经存在的一个容器共享一个网络ip配置而不是和宿主机共享。新创建的容器不会创建自己的网卡,配置自己的IP,而是和一个指定的容器共享IP、端口范围等。同样,两个容器除了网络方面,其他的如文件系统、进程列表等还是隔离的。

测试:

创建一个tomcat85容器,再创建第二个tomcat86容器,创建第二个容器的时候指定使用第一个tomcat85容器的网络配置。

docker run -d-p8085:8080                              --name tomcat85 billygoo/tomcat8-jdk8
docker run -d-p8086:8080 --network container:tomcat85 --name tomcat86 billygoo/tomcat8-jdk8

但是会提示端口号冲突,因为两台tomcat公用8080端口。

换一个Alpine演示:

Alpine Linux 是一款独立的、非商业的通用 Linux 发行版,专为追求安全性、简单性和资源效率的用户而设计。 可能很多人没听说过这个 Linux 发行版本,但是经常用 Docker 的朋友可能都用过,因为他小,简单,安全而著称,所以作为基础镜像是非常好的一个选择,可谓是麻雀虽小但五脏俱全,镜像非常小巧,不到6M的大小,所以特别适合容器打包。

docker run -it--name alpine1 alpine /bin/sh
docker run -it--network container:alpine1 --name alpine2 alpine /bin/sh

验证两台容器共用同一个IP。

测试:将alpine1停掉,查看alpine2的ip(只有lo):

4.3.5 自定义网络

before(不用自定义网络)
docker run -d-p8081:8080 --name tomcat81 billygoo/tomcat8-jdk8
docker run -d-p8082:8080 --name tomcat82 billygoo/tomcat8-jdk8

现象:

tomcat81和tomcat82通过ip可以互相ping通。

tomcat81和tomcat82通过name互相ping不通。

存在问题:

容器挂掉的话,重新启动后,ip是会变的,ip变化就会导致服务之间找不到。

after

自定义网络默认使用的是桥接网络 bridge

新建自定义网络

docker network create zzyy_network

新建容器加入上一步新建的自定义网络

docker run -d-p8081:8080 --network zzyy_network --name tomcat81 billygoo/tomcat8-jdk8
docker run -d-p8082:8080 --network zzyy_network --name tomcat82 billygoo/tomcat8-jdk8

此时tomcat81和tomcat82通过name互相可以ping通。

【结论】:自定义网络本身就维护好了主机名和 ip 的对应关系(ip 和域名都能通)

相关内容

热门资讯

最新或2023(历届)两学一做... 最新或2023(历届)两学一做五查五改剖析材料一:  各党(总)支部:  为确保全乡“两学一做”学习...
基层党员讲奉献有作为发言材料 ... 奉献是一件容易的事,因为有时就是举手之劳;奉献也是一件困难的事情,因为它更是一种觉悟、一种境界。实际...
小学教师好人好事事迹材料 教师... 小学教师好人好事事迹材料一:  人们常用“人类灵魂的工程师”来形容教师,许多教师在三尺讲台上默默的耕...
最新或2023(历届)医生好人... 最新或2023(历届)医生好人好事事迹材料一:  5月22日中午11时45分,两位来自三桥乡的女士领...
最新或2023(历届)好人好事... 最新或2023(历届)好人好事事迹材料【篇一】  人生应该如蜡烛一样,从顶燃到底,一直都是光明的。身...
最新或2023(历届)学生好人... 最新或2023(历届)学生好人好事事迹材料一:  20xx年10月22日晚上6时许,我学院xx国贸(...
最新或2023(历届)身边的好... 最新或2023(历届)身边的好人好事事迹材料一:  她于1980年参加教育工作,30多年来,她始终坚...
社区身边好人好事事迹材料 社区... 社区身边好人好事事迹材料一:  爱,怀着为居民服务的情感,组织并创立了洪校社区“文艺小分队”。在得到...
最新或2023(历届)单位好人... 最新或2023(历届)单位好人好事事迹材料一:  在党的十七大和经济工作会议精神鼓舞下,在省、市商务...
最新或2023(历届)社区党员... 最新或2023(历届)社区党员好人好事事迹材料一:  吴 ,男,1975年5月10日出生,自幼患小儿...
纪录片筑梦中国观后感【汇总】 ...  【篇一】  《筑梦中国——中华民族复兴之路》今晚20:30在新闻频道首播。该片通过回顾鸦片战争以来...
摩登时代电影观后感 摩登时代电... 【篇一】  昨晚看的《摩登时代》,至今不能让我释怀。最近看电影很多,也被感动过很多次。可只有《摩登时...
电影天上的菊美观后感汇总 观看... 【篇一】  《天上的菊美》在四川地区公映。该片在峨眉电影集团2号摄影棚举行隆重首映式,本片导演苗月、...
电影桔子的天空观后感400字 ...   【篇一】  今天,我们班看了一部电影,名叫《桔子的天空》,有个小孩给我的印象比较深刻,叫福果,福...
关于双12淘宝活动方案 关于双...  【篇一】  活动时间:12月7日到12月15日 主题:这次活动主要以满就减、满就送、满就抽奖等形式...
最新或2023(历届)圣诞活动...  【篇一】  1.活动目的:作为西方的传统节日,圣诞节是特别重要也是特别有意义的一个节日。在西方,圣...
秉公执法人民公安为人民剖析材料... 【篇一】  反映的问题作出重要批示,基层干部不作为、乱作为、贪腐以及执法不公等问题,损害群众切身利益...
幼儿园感恩节主题活动方案 感恩...  【篇一】  一、大活动目标  将感恩的种子播撒在幼儿的心田  二、大活动名称  “感恩你我,真情成...
三严三实专题交流发言材料【汇总... 【篇一】  书记关于“三严三实”的重要论述,质朴凝练、内涵深刻,立意高远,具有重大现实针对性和深远历...
关于班组建设经验交流材料 安全... 【篇一】  自主管理是班组管理的最高境界,也是搞好班组建设的最高追求。***工序在上级相关部门的帮助...