ITPub博客

首页 > 数据库 > 数据库开发技术 > 健哥带你细致学习Docker网络 - Host和none模式

健哥带你细致学习Docker网络 - Host和none模式

原创 数据库开发技术 作者:Finally_m 时间:2023-01-20 08:03:00 0 删除 编辑
点击上方蓝字关注我们

最近有几个已经就业的小伙伴,过来问千锋健哥关于Docker网络配置的问题,他们在实际开发中还是有些疑问。关于Docker网络这一块的内容确实很多,为了让大家搞清楚这个问题,健哥准备搞几篇系列文章,来为各位小伙伴解惑。这次健哥带来的是Docker网络的host和none模式,接下来我们直接上干货!!!

Docker容器和服务之所以强大的原因之一,是可以将它们连接在一起,或者将它们连接到非Docker的工作负载上。而Docker容器和服务甚至都不需要知道它们部署在Docker容器上。无论Docker主机是运行在Linux、window上,或者两者混合运行,都可以使用Docker以与平台无关的方式来管理它们。

而这一切的基础,都是缘于Docker网络提供的强大功能和良好设计!

关注Java架构栈,干货天天都不断哦!

一. 操作环境

我们先说一下运行所需要的环境,如下:

centos 7.x版本docker版本:Docker version 20.10.18, build b40c2f6xshell 7

二. Docker network 常用命令

我们先来看看Docket中提供的常用network命令。

1.查看docker network帮助手册

[root@hecs-215393 ~]# docker network --help  # 查看docker network 帮助手册

Usage:  docker network COMMAND

Manage networks

Commands:
  # 通过网络连接容器
  connect     Connect a container to a network
  # 创建一个网络连接
  create      Create a network
  # 关闭容器连接
  disconnect  Disconnect a container from a network
  # 显示一个或多个网络上的详细信息
  inspect     Display detailed information on one or more networks
  # 列出所有网络
  ls          List networks
  # 删除所有未使用的网络
  prune       Remove all unused networks
  # 删除一个或者多个网络
  rm          Remove one or more networks

Run 'docker network COMMAND --help' for more information on a command.
[root@hecs-215393 ~]# 

2.列出docker网络

[root@hecs-215393 ~]# docker network ls # 列出docker网络
NETWORK ID     NAME      DRIVER    SCOPE
5b15d96cf179   bridge    bridge    local
12bf219add93   host      host      local
66b6768156e6   none      null      local
[root@hecs-215393 ~]# 

3.通过docker network create创建一个网络

[root@VM-8-11-centos ~]# docker network ls
NETWORK ID     NAME      DRIVER    SCOPE
52f8e50a864d   bridge    bridge    local
5534ad5d6eca   host      host      local
d60aa65de36e   none      null      local
# 创建一个docker网络
[root@VM-8-11-centos ~]# docker network create qf
6fc2499a6dd26591e1b61f1d20e3c9c61f4b64e3de77b7a832be0f68572ec279

# 再次查看一下当前的网络状态
[root@VM-8-11-centos ~]# docker network ls
NETWORK ID     NAME      DRIVER    SCOPE
52f8e50a864d   bridge    bridge    local
5534ad5d6eca   host      host      local
d60aa65de36e   none      null      local
6fc2499a6dd2   qf        bridge    local
[root@VM-8-11-centos ~]# 

4.查看qf网络的详细信息

[root@VM-8-11-centos ~]# docker network inspect qf
[
    {
        "Name": "qf",
        "Id": "6fc2499a6dd26591e1b61f1d20e3c9c61f4b64e3de77b7a832be0f68572ec279",
        "Created": "2022-10-09T16:41:48.505578412+08:00",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": {},
            "Config": [
                {
                    "Subnet": "172.19.0.0/16",
                    "Gateway": "172.19.0.1"
                }
            ]
        },
        "Internal": false,
        "Attachable": false,
        "Ingress": false,
        "ConfigFrom": {
            "Network": ""
        },
        "ConfigOnly": false,
        "Containers": {},
        "Options": {},
        "Labels": {}
    }
]
[root@VM-8-11-centos ~]# 

三. 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

通过观察可以发现,容器内部的网络和宿主机一模一样。

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地址的映射关系,这样使得容器间通信更为可靠和容易。至于其他模式,如果各位小伙伴想要了解,敬请继续期待千锋健哥本系列的其他文章哦。

扫码咨询了解课程详情,获取课程配套资料!



扫码或者点击文末左下角【阅读原文】快速进入学习!



点击【阅读原文】,免费开始学习Docker视频课程!

原文作者:Java架构栈;如有侵权,请联系管理员删除。

请登录后发表评论 登录
全部评论

注册时间:2021-04-13

  • 博文量
    573
  • 访问量
    243823