51工具盒子

依楼听风雨
笑看云卷云舒,淡观潮起潮落

Docker 网络配置

Docker 在使用过程中可以配置网络工作模式,来控制容器之间、容器与主机之间的通信方式。本文详细介绍了Docker中的网络功能,包括网络模式(桥接、主机、容器、none和自定义网络)的应用,容器间的通信解决方案,以及如何创建和管理网络以实现服务名直接通信。

概述 {#概述}

需要解决的问题

(1)容器间、容器与主机间的互联和通信以及端口映射
(2)容器IP变动时候,可以通过服务名直接网络通信而不受到影响

基本用法 {#基本用法}

五种网络模式 {#五种网络模式}

| 网络模式 | 命令指定方式 | 描述 | 理解 | |-----------|-------------------|-----------------------------------------------------|-----------| | bridge | --network bridge | 为每一个容器分配、设置 ip ,并将容器连接到 docker0 虚拟网桥上,虚拟网桥,默认为该网络模式 | 一人一个 | | host | --network host | 容器不会创建自己的网卡,配置 ip 等,而是使用宿主机的 ip 和端口 | 多人一个 | | container | --network 容器名称或id | 新创建的容器不会创建自己的网卡和配置自己的ip,而是和一个指定的容器共享ip、端口范围等 | 自己没有,用别人的 | | none | --network none | 容器有独立的Network namespace,但并没有对其进行任何网络设置,如网桥,ip等 | 有,但是空的 |

桥接模式------ bridge {#桥接模式——-bridge}

为每一个容器分配、设置IP等,并将容器连接到docker0的虚拟网桥。若没有特别申明,则为默认自带一个IP以及网络设置。

  • Docker使用Linux桥接的方式,在宿主机虚拟一个Docker容器网桥(docker0)。
    Docker每启动一个容器时会根据Docker网桥的网段分配给容器一个ip地址。
    同时Docker网桥是每个容器的默认网关。
    同一宿主机内的容器都接入同一个网桥,这样容器之间就能够通过容器的Container-IP直接通信。

  • docker run创建容器的时,未指定network的容器默认的网络模式就是bridge,使用的就是docker0。
    在宿主机ifconfig,就可以看到docker0和自己创建的network:

    • eth0,eth1......代表网卡一,网卡二......
    • lo代表127.0.0.1(localhost)
    • inet addr表示网卡的ip地址
  • 网桥docker0会创建一对对等虚拟设备接口:一个叫veth,另一个叫eth0,成对匹配。
    整个宿主机的网桥模式都是docker0,类似一个交换机有一堆接口,每个接口叫veth,
    在本地主机和容器内分别创建一个虚拟接口,并让他们彼此联通(这样一对接口叫veth pair);
    每个容器实例内部也有一块网卡,每个接口叫eth0;
    docker0上面的每个veth匹配某个容器实例内部的eth0,两两配对。

主机模式------ host {#主机模式——-host}

容器不会虚拟出自己的网卡、IP等,而是使用宿主机的IP和端口。

注意:在创建的时候,将再在指定 -p 8083:8080, 无意义,运行时候会警告,但是不报错。因为该容器和主机ip和端口同步。

容器模式------ container {#容器模式——-container}

新创建的容器不会创建自己的网卡,没有自己的IP,也不会进行相应的配置。而是和一个指定的容器共享IP端口范围等。

注意:当192.168.20.2容器停掉后,192.168.20.3的网络也会同时停掉!

none模式------ none {#none模式——-none}

容器有自己独立的Network namespace,但是没有进行任何的相关配置。即禁用网络功能,只有lo标识(就是127.0.0.1表示本地回环)

  • 在none模式下,并不为Docker容器进行任何网络配置。
    也就是说,这个Docker容器没有网卡、IP、路由等信息,只有一个lo。
    需要我们自己为Docker容器添加网卡、配置IP等。

自定义网络 {#自定义网络}

为使得众多的容器,进行分门别类,方便管理的情况下,而且通过服务名来ping通,所以采用自定义网络进行管理!

总结,自定义网络本身就维护好了主机名和ip的对应关系( ip和域名都能通)

IPC 配置 {#IPC-配置}

Docker的IPC(Inter-Process Communication,进程间通信)配置主要用于控制容器间是否可以进行进程间通信。在Docker中,可以通过设置--ipc参数来配置IPC命名空间。

以下是一些常用的IPC设置:

  • none:容器拥有自己的IPC命名空间,不与其他容器共享。
  • private:容器拥有自己的IPC命名空间,但是可以与其他容器共享进程、消息队列和信号量。
  • host:容器使用宿主机的IPC命名空间。
  • container:<name|id>:容器与指定的容器共享IPC命名空间。

例如,如果你想要两个容器使用相同的IPC命名空间,可以这样设置:

或者,如果你想要让container2container1共享IPC命名空间:

在Docker Compose中,可以在docker-compose.yml文件中设置IPC模式:

请注意,在使用IPC设置时,你需要考虑到安全问题,因为容器间的IPC会提供一种进程间通信的方式,可能被恶意利用。

参考资料 {#参考资料}



文章链接:
https://www.zywvvd.com/notes/tools/docker/docker-network/

赞(0)
未经允许不得转载:工具盒子 » Docker 网络配置