Docker容器网络基础概述

 更新时间:2023年09月26日 11:39:18   作者:Mr_csc  
这篇文章主要介绍了Docker容器网络基础概述,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

开放容器端口

当使用docker create或者docker run创建并运行一个容器的时候,默认不会开放容器端口。

可以使用--publish或者-p选项来开放容器的端口,这时Docker就会创建一条防火墙规则,将宿主机的端口和容器的端口关联起来,宿主机的这个端口接收和发出的所有数据都会被转发到容器的端口中,这样的话外界或者宿主机上的其他容器和进程就可以通过宿主机的端口访问容器的端口。

将容器的端口开放其实是一种不安全的行为,如果只是想让同一台宿主机之间的容器可以通过网络相互通信的话,不需要开放它们的端口,只需要借助Docker网络(Docker Network)即可。

Docker网络(Docker Network)

Docker可以创建各种类型的虚拟网络,例如可以是bridge网络,也可以是overlay网络等等。
可以通过docker network创建、查看当前宿主机上的Docker Network,让一个容器加入Docker Network等等。
一个容器可以加入多个Docker Network。

容器在Docker网络中的IP地址和hostname

默认情况下,当一个容器加入了一个Docker Network之后,Docker会自动分配给这个容器一个IP地址。也可以在容器加入Docker Network的时候,指定一个ip地址给它。
容器的hostname默认是该容器的ID。也可以在容器加入Docker Network的时候指定一个hostname给它。

DNS服务

默认情况下,Docker会通过bind mount的方式把宿主机的\etc\resolv.conf挂载到每一个容器中去。因此,每一个容器的DNS配置都和宿主机的是一样的。

如果容器加入的是用户通过docker network create创建出来的自定义网络,那么容器将会使用的Docker内置的DNS服务器,内置的DNS服务器将会把外部IP地址的查找转发给宿主机上配置的DNS服务器。

也可以在docker create或者docker run的时候指定容器的DNS配置。

需要注意的是:容器并不会共享宿主机上的\etc\hosts文件,可以在运行docker run时指定要加入容器的\etc\hosts文件中的内容。

Docker Network Drivers

Docker支持以下不同类型的Docker Network:

Network DriverDescript
bridge使用docker network create创建网络时创建出来的默认网络类型。当同一台宿主机上的多个容器之间需要相互通信的时候,通常会使用这种网络。在这种网络中的容器无法和宿主机以及别的网络的容器进行通信
host将宿主机和容器之间相连接的网络类型,容器可以直接使用宿主机的网络
overlay将多个Docker daemon连接在一起,允许Swarm服务和容器跨节点(主机)进行网络通信
ipvlan这种网络允许用户对IPv4和IPv6的寻址有着完全的控制
macvlan允许将一个MAC地址分配给容器,Docker daemon会根据容器的MAC地址对数据进行路由。一般来说这种类型的网络用于部署那些古老的遗留应用程序,这些程序面向的是物理网络开发,而不是网络协议栈
none将一个容器和宿主机以及其他容器完全隔离开来的网络类型,这种网络在Swarm服务中不可使用

代理服务器

可以给Docker Client或者Docekr Daemon设置代理服务器(proxy server)。

包过滤

当把某一个容器的端口开放了之后,为了安全起见一般会需要对这个端口的数据包进行过滤。在Linux中,Docker是通过iptables规则来进行包过滤的。

Docker会在iptables中插入两条iptables chain,分别叫做DOCKER-USERDOCKER,并且会保证所有的网络包都会先通过这两个chain的检查,它们都属于FORWARD chain的一部分。

所有容器的iptables规则都会被自动加入到DOCKER chain中。

不要手动添加或修改或删除DOCKER chain中的内容,但是可以向DOCKER-USER chain中添加规则,这些规则会比DOCKER chain中的规则优先级更高。事实上,Docker总会保证在FORWARD chain中,DOCKER-USER chain的优先级是最高的,其次就是DOCKER chain,其他的iptables chain中的规则,不管是手动添加的,还是防火墙添加的,优先级都不会比它们两个高。

防火墙

如果运行Docker的系统使用了firewalld并且开启了--iptables,Docker就会自动创建一个名为dockerfirewalld zone,并把所有由Docker创建的网络接口(例如docker0)放入到这个zone里面。

Debian和Ubuntu自带的防火墙ufw使用的是iptables里面的INPUTOUTPUT chain,而Docker会在nat表中处理容器的网络流量,因此Docker容器的流量实际上并不会经过ufw的过滤。

参考 https://docs.docker.com/network/

以上就是Docker容器网络基础概述的详细内容,更多关于Docker容器网络的资料请关注脚本之家其它相关文章!

相关文章

  • Docker部署Logstash同步Mysql数据到ES方式

    Docker部署Logstash同步Mysql数据到ES方式

    本文介绍了如何搭建ELK(Elasticsearch, Logstash, Kibana)日志系统,包括配置文件准备、Logstash与Elasticsearch部署、驱动文件准备、配置文件编辑、容器操作以及日志查看等步骤,文章内容是作者的个人经验分享
    2024-10-10
  • Docker简单安装与应用入门教程

    Docker简单安装与应用入门教程

    这篇文章主要介绍了Docker简单安装与应用,结合实例形式分析了Docker常见的安装、应用构建、终端访问等操作相关实现技巧与注意事项,需要的朋友可以参考下
    2018-06-06
  • Centos8无法安装docker问题的解决方法

    Centos8无法安装docker问题的解决方法

    这篇文章主要给大家介绍了关于Centos8无法安装docker问题的解决方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-04-04
  • Docker for windows pull镜像文件的安装位置改变的方法

    Docker for windows pull镜像文件的安装位置改变的方法

    这篇文章主要介绍了Docker for windows pull镜像文件的安装位置改变的方法的相关资料,需要的朋友可以参考下
    2016-12-12
  • Docker中数据卷(volume)管理的两种方式

    Docker中数据卷(volume)管理的两种方式

    数据卷有两种形式,一种是容器中的某个目录,它可以被别的容器引用,只要有一个容器引用了这个数据卷,数据就不会被删除;另一种数据卷是将容器中的数据卷和宿主机的目录进行挂载。 数据卷可以在多个容器之间共享,修改数据卷不会影响镜像
    2021-07-07
  • Docker 搭建 RabbitMQ的详细过程

    Docker 搭建 RabbitMQ的详细过程

    在现代微服务与分布式架构中,RabbitMQ 是一款成熟的开源消息队列中间件,提供了可靠的消息投递、丰富的路由策略和管理插件,本文将详细介绍Docker 搭建 RabbitMQ的过程,感兴趣的朋友一起看看吧
    2025-04-04
  • Docker如何解决tomcat容器启动成功,无法访问的问题

    Docker如何解决tomcat容器启动成功,无法访问的问题

    这篇文章主要介绍了Docker如何解决tomcat容器启动成功,无法访问的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-07-07
  • Docker安装常用组件(mysql,redis)的方法

    Docker安装常用组件(mysql,redis)的方法

    今天小编就为大家分享一篇关于Docker安装常用组件(mysql,redis)的方法,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2018-10-10
  • 如何给Docker配置官方国内加速镜像

    如何给Docker配置官方国内加速镜像

    在国内访问 Docker 官方的镜像,一直以来速度都慢如蜗牛。为了快速访问 Docker 官方镜像都会配置三方加速器
    2017-06-06
  • Docker下MySQL配置文件不生效的解决方法(超全面!)

    Docker下MySQL配置文件不生效的解决方法(超全面!)

    在Docker中运行MySQL并遇到需要调整配置的情况时,比如想要关闭ONLY_FULL_GROUP_BY的严格模式,我们可以通过以下步骤来实现sql_mode的修改:以下是解决此类问题的步骤和思路,需要的朋友可以参考下
    2024-09-09

最新评论