Docker入门系列 7. Docker 容器网络的概念及网络配置 主机网络


1. 使用主机网络

如果您使用容器的主机网络模式,那么容器的网络堆栈不会与 Docker 主机隔离(容器共享主机的网络名称空间) ,并且容器不会得到自己的 ip 地址分配。 例如,如果您运行一个绑定到端口80的容器,并且使用主机网络,那么容器的应用程序在端口80的主机 IP 地址上是可用的。

注意: 当使用主机模式网络时,容器没有自己的 ip 地址,因此端口映射不生效,并且忽略 -p--publish-P--publish-all 选项,从而产生一个警告:

WARNING: Published ports are discarded when using host network mode

主机模式网络对于优化性能非常有用,并且在容器需要处理大范围的端口的情况下,因为它不需要网络地址转换(NAT) ,也不会为每个端口创建“ userland-proxy”。

主机网络驱动程序只能在 Linux 主机上工作,而且不支持 Mac 版的 Docker Desktop,Windows 版的 Docker Desktop,或 Windows 服务器版的 Docker EE。

您还可以为群服务使用一个主机网络,方法是将 --network host 传递给 docker service create 命令。 在这种情况下,控制流量(与管理群和服务相关的流量)仍然通过覆盖网络发送,但是各个群服务容器使用 Docker 守护进程的主机网络和端口发送数据。 这就产生了一些额外的限制。 例如,如果一个服务容器绑定到端口80,那么在给定的群节点上只能运行一个服务容器。

2. 实践练习 主机网络

2.1 目标

本练习涉及处理网络独立容器,直接绑定到 Docker 主机的网络,没有网络隔离。

实践目标是启动一个直接绑定到 Docker 主机上的端口80的 nginx 容器。 从网络的角度来看,这与 nginx 进程直接在 Docker 主机而不是容器中运行的隔离级别是相同的。 但是,在所有其他方面,例如存储、流程名称空间和用户名称空间,nginx 流程都与主机隔离。

2.2 前提条件

  • 此过程要求在 Docker 主机上可以使用端口80。 要让 Nginx 在另一个端口上侦听,请参阅 Nginx 映像的文档

  • 主机网络驱动程序只能在 Linux 主机上工作,而且不支持 Mac 版的 Docker Desktop,Windows 版的 Docker Desktop,或 Windows 服务器版的 Docker EE。

2.3 实践

  1. 创建并启动容器作为一个分离的进程。 --rm 选项意味着在容器退出 / 停止时删除它。 -d 标志意味着启动分离的容器(在后台)。

     docker run --rm -d --network host --name my_nginx nginx
  2. 访问 Nginx 服务 通过网页浏览器 浏览 http://localhost:80/

  3. 使用以下命令检查网络堆栈:

    • 使用以下命令检查网络堆栈:

      ip addr show
    • 使用 netstat 命令验证哪个进程绑定到端口80。 您需要使用 sudo,因为进程属于 Docker 守护进程用户,否则您将无法看到它的名称或 PID。

      sudo netstat -tulpn | grep :80
  4. 停止容器。当它使用 --rm 选项启动时,它将被自动删除。

     docker container stop my_nginx

文章作者: Baymax
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Baymax !
评论
 上一篇
Docker入门系列  8. Docker 容器网络的概念及网络配置 macvlan Docker入门系列 8. Docker 容器网络的概念及网络配置 macvlan
1. 使用 macvlan 网络有些应用程序,特别是监视网络流量的遗留应用程序或应用程序,希望直接连接到物理网络。 在这种情况下,你可以使用 macvlan 网络驱动程序为每个容器的虚拟网络接口分配一个 MAC 地址,使其看起来像一个直接连
2020-05-25
下一篇 
Docker入门系列  5. Docker 容器网络的概念及网络配置 覆盖网络 Docker入门系列 5. Docker 容器网络的概念及网络配置 覆盖网络
1. 使用覆盖网络覆盖网络驱动程序在多个 Docker 守护进程主机之间创建一个分布式网络。 这个网络位于(覆盖)主机特定网络的顶部,允许连接到它的容器(包括群服务容器)在启用加密时进行安全通信。 Docker 透明地处理每个数据包与正确的
2020-05-24
  目录