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-compose实现容器任务编排的方法步骤

    docker-compose实现容器任务编排的方法步骤

    本文主要介绍了docker-compose实现容器任务编排的方法步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-01-01
  • 详解docker-compose速度太慢解决方式

    详解docker-compose速度太慢解决方式

    这篇文章主要介绍了详解docker-compose速度太慢解决方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11
  • Docker安装MySQL并使用Navicat连接的操作方法

    Docker安装MySQL并使用Navicat连接的操作方法

    这篇文章主要介绍了Docker安装MySQL并使用Navicat连接,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-09-09
  • docker build与Dockerfile问题

    docker build与Dockerfile问题

    这篇文章主要介绍了docker build与Dockerfile问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-03-03
  • Docker进阶之构建自定义镜像实战指南

    Docker进阶之构建自定义镜像实战指南

    从docker镜像仓库中下载的镜像不能满足我们的需求时,可以对镜像进行更改,下面这篇文章主要给大家介绍了关于Docker进阶之构建自定义镜像实战的相关资料,需要的朋友可以参考下
    2022-07-07
  • Docker 常用命令详细整理

    Docker 常用命令详细整理

    这篇文章主要介绍了Docker 常用命令详细整理的相关资料,需要的朋友可以参考下
    2017-05-05
  • ubuntu22通过docker安装wechat启动后无界面的问题及解决方法

    ubuntu22通过docker安装wechat启动后无界面的问题及解决方法

    这篇文章主要介绍了ubuntu22通过docker安装wechat启动后无界面的解决方法,通过微信创建脚本发现一系列问题,最终在小编的努力下顺利解决,下面把解决过程分享给大家,需要的朋友可以参考下
    2022-07-07
  • docker配置Runner容器的方法

    docker配置Runner容器的方法

    今天通过本文给大家介绍docker配置Runner容器的方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2021-11-11
  • Docker容器处于Removal in process无法删除问题及解决

    Docker容器处于Removal in process无法删除问题及解决

    这篇文章主要介绍了Docker容器处于Removal in process无法删除问题及解决方案,具有很好的参考价值,希望对大家有所帮助。
    2023-07-07
  • Docker安装jenkins实现微服务多模块打包的示例代码

    Docker安装jenkins实现微服务多模块打包的示例代码

    本文主要介绍了Docker安装jenkins实现微服务多模块打包的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-07-07

最新评论