细致学习Docker网络 - Host和none模式
最近有几个已经就业的小伙伴,过来问千锋健哥关于Docker网络配置的问题,他们在实际开发中还是有些疑问。关于Docker网络这一块的内容确实很多,为了让大家搞清楚这个问题,健哥准备搞几篇系列文章,来为各位小伙伴解惑。这次健哥带来的是Docker网络的host和none模式,接下来我们直接上干货!!!
Docker容器和服务之所以强大的原因之一,是可以将它们连接在一起,或者将它们连接到非Docker的工作负载上。而Docker容器和服务甚至都不需要知道它们部署在Docker容器上。无论Docker主机是运行在Linux、window上,或者两者混合运行,都可以使用Docker以与平台无关的方式来管理它们。
而这一切的基础,都是缘于Docker网络提供的强大功能和良好设计!
一. 操作环境
我们先说一下运行所需要的环境,如下:
centos 7.x版本
docker版本:Docker version 20.10.18, build b40c2f6
xshell 7
二. Docker network 常用命令
我们先来看看Docket中提供的常用network命令。
查看docker network帮助手册
列出docker网络
通过docker network create创建一个网络
查看qf网络的详细信息
三. Docker网络的作用
在开始学习Docker网络用法之前,我们再来了解一下Docker网络的作用,主要作用如下:
1. Docker网络可以负责容器间的相互连接和通信,以及端口映射; 2. 当容器`ip`地址发生更改时,可以通过服务名称进行网络通信,不会因为`ip`的更改导致服务不可用。
四. 网络模式
Docker的网络有以下几种网络模式。
网络模式说明
bridge, 虚拟网桥, 默认模式每一个容器有独立的ip, 并将容器连接到docker0网桥上
host使用宿主机的ip和端口号, 容器不会虚拟出自己的网卡、配置ip
none有独立的network namespace,但是并未对其进行任何网络设置
container和一个指定的容器共享ip和端口号, 不会虚拟出网卡、配置ip等操作.
1. host模式
直接使用宿主机的ip地址与外界通信, 不再需要额外进行nat转换;
容器将不会获得一个独立的network namespace, 而是和宿主机共用一个network namespace;
容器不会虚拟出自己的网卡而是使用宿主机的ip和端口号。
1.1 host模式详解
当容器指定该模式时,会共享宿主机的ip和port. 换句话说, 容器指定的端口号不能重复.「使用此模式, 当使用-p参数指定端口映射的时候会出现警告」.
1.2 验证案例
我们以tomcat容器为例进行验证,先启动tomcat容器,指定应用的网络模式为host, 并使用-p参数指定端口映射。
警告信息: WARNING: Published ports are discarded when using host network mode;
host模式使用的是宿主机端口号,此模式下使用-p映射端口无效。
1.3 查看宿主机网络情况
进入tomcat8081容器内部查看网络。进入tomcat容器内部如果没有ip addr命令,则需要手动安装一下,命令如下所示:
·
apt-get update & apt-get install -y ip-route2
通过观察可以发现,容器内部的网络和宿主机一模一样。
2.
1.4 host模式使用姿势
--network=host或者--network host
2. none模式
none模式下,并不为docker容器进行任何网络配置;
docker容器没有网卡,ip, 路由等信息, 只有一个lo;
需要我们自己为docker容器添加网卡, 配置ip`等;
此种模式给了程序员极大的灵活性,但是需要自己配置,如无其它需求,建议使用bridge或者host模式。
2.1 使用姿势
我们在创建容器的时候,可以指定网络模式为none模式。
—network none或者—network=none
2.2 使用示例
这里以centos容器为例。
查看容器的详细信息当中的网络信息:
进入容器内部,查看网络情况:
五. 总结
各位小伙伴,今天千锋健哥为大家带来的birdge模式就是这些内容了,是不是很容易理解呢?
docker网络作为整个docker体系中极为重要的一个知识点,在生产中经常被用到,尤其是网络模式当中的bridge模式和host模式更是应该重点掌握。
自定义网络,可以通过服务名称「容器名称」进行容器间的通信。自动处理了容器名称与ip地址的映射关系,这样使得容器间通信更为可靠和容易。至于其他模式,如果各位小伙伴想要了解,敬请继续期待千锋健哥本系列的其他文章哦。
相关推荐HOT
更多>>分布式锁是什么?有什么作用?
分布式锁是一种用于在分布式系统中实现并发控制的机制。在多个节点或进程之间共享资源时,分布式锁可确保只有一个节点或进程可以访问或修改共享...详情>>
2023-06-15 11:05:38Java中switch条件语句如何使用?
在Java中,switch语句是一种条件语句,用于根据不同的条件值执行不同的代码块。switch语句的语法如下:switch(expression){casevalue1://当expr...详情>>
2023-06-06 16:24:02js获取checkbox是否选中
要检查 JavaScript 复选框是否被选中,可以使用 checked 属性。该属性返回布尔值 true 表示复选框被选中,false 表示未被选中。详情>>
2023-04-21 10:19:04linux查找文件命令
在Linux系统中,可以使用以下命令来查找文件:1.find命令:find命令可以在指定的目录下递归查找文件,可以根据文件名、类型、大小等条件来查找...详情>>
2023-03-14 13:28:14