• docker网络模式


    本文转自https://i.cnblogs.com/EditPosts.aspx?opt=1

    Docker网络有四种模式:桥模式,主机模式,容器模式和无网络模式。

    bridge模式网络

    在该模式(见下图)中,Docker守护进程创建了一个虚拟以太网桥docker0,附加在其上的任何网卡之间都能自动转发数据包。默认情况下,守护进程会创建一对对等接口,将其中一个接口设置为容器的eth0接口,另一个接口放置在宿主机的命名空间中,从而将宿主机上的所有容器都连接到这个内部网络上。同时,守护进程还会从网桥的私有地址空间中分配一个IP地址和子网给该容器。

    $ docker run -d -P --net=bridge nginx:1.9.1


    因为bridge模式是Docker的默认设置,所以你也可以使用docker run -d -P nginx:1.9.1。如果你没有使用-P(发布该容器暴露的所有端口)或者-p
    host_port:container_port(发布某个特定端口),IP数据包就不能从宿主机之外路由到容器中。

    host模式网络

    该模式将禁用Docker容器的网络隔离。因为容器共享了宿主机的网络命名空间,直接暴露在公共网络中。因此,你需要通过端口映射(port mapping)来进行协调。

    [13:34:15 root@rke01 opt]$ ip addr | grep -A 2 eth0:

    2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP qlen 1000

        link/ether 00:50:56:b7:48:1e brd ff:ff:ff:ff:ff:ff

        inet 192.168.55.205/24 brd 192.168.55.255 scope global eth0

    [13:34:18 root@rke01 opt]$ docker exec -it kube-apiserver ip addr | grep -A 2 eth0:

    2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000

        link/ether 00:50:56:b7:48:1e brd ff:ff:ff:ff:ff:ff

    inet 192.168.55.205/24 brd 192.168.55.255 scope global eth0

    在下图中,我们可以看到:当使用host模式网络时,容器实际上继承了宿主机的IP地址。该模式比bridge模式更快(因为没有路由开销),但是它将容器直接暴露在公共网络中,是有安全隐患的。但是,容器的其他方面,如文件系统、进程列表等还是和宿主机隔离的。

    container模式网络

    该模式会重用另一个容器的网络命名空间。通常来说,当你想要自定义网络栈时,该模式是很有用的。实际上,该模式也是Kubernetes使用的网络模式。

    $ docker run -d -P --net=bridge nginx:1.9.1
    $ docker ps
    CONTAINER ID  IMAGE        COMMAND   CREATED         STATUS
    PORTS                      NAMES
    eb19088be8a0  nginx:1.9.1  nginx -g  3 minutes ago   Up 3 minutes
    0.0.0.0:32769->80/tcp,
    0.0.0.0:32768->443/tcp     admiring_engelbart
    $ docker exec -it admiring_engelbart ip addr
    8: eth0@if9: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9001 qdisc noqueue state UP group default
    link/ether 02:42:ac:11:00:03 brd ff:ff:ff:ff:ff:ff
    inet **172.17.0.3**/16 scope global eth0
     
    $ docker run -it --net=container:admiring_engelbart ubuntu:14.04 ip addr
    ...
    8: eth0@if9: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9001 qdisc noqueue state UP group default
    link/ether 02:42:ac:11:00:03 brd ff:ff:ff:ff:ff:ff
    inet **172.17.0.3**/16 scope global eth0

    结果(上面的例子)显示:第二个容器使用了--net=container参数,因此和第一个容器admiring_engelbart具有相同的IP地址172.17.0.3

    none模式网络

    该模式将容器放置在它自己的网络栈中,但是并不进行任何配置。实际上,该模式关闭了容器的网络功能,在以下两种情况下是有用的:容器并不需要网络(例如只需要写磁盘卷的批处理任务);你希望自定义网络,在第3章中有很多选项使用了该模式。

    $ docker run -d -P --net=none nginx:1.9.1
    $ docker ps
    CONTAINER ID  IMAGE          COMMAND   CREATED
    STATUS        PORTS          NAMES
    d8c26d68037c  nginx:1.9.1    nginx -g  2 minutes ago
    Up 2 minutes                 grave_perlman
    $  docker inspect d8c26d68037c | grep IPAddress
    "IPAddress": "",
    "SecondaryIPAddresses": null,

    在上面的例子中可以看到,恰如我们所料,网络没有任何配置。

     

  • 相关阅读:
    Golang手动分页,按等份拆分数据
    GORM无法映射到结构体上
    VSCODE GOLANG运行多个服务
    解决,MAVEN
    Properties配置文件常见错误写法以及转义字符说明
    Pentaho Data Integration (PDI/Kettle)与Java版本支持关系
    MYSQL之读写分离搭建方案
    Windows下创建软件快速启动命令
    Sonar的一些使用总结
    使用SVG Path绘图
  • 原文地址:https://www.cnblogs.com/yehaifeng/p/8708217.html
Copyright © 2020-2023  润新知