zoukankan      html  css  js  c++  java
  • python|Docker容器之间通信

    Docker容器间通信

    Docker会为每个创建的容器自动分配一个虚拟IP,这个虚拟IP无法从容器外侧进行访问,只是Docker环境内部容器间彼此通信的标识,容器间的网络是互通互联的。

    但是通过这种虚拟IP方式,进行容器间的通信,有一些局限性。因为在Docker中创建一个容器非常容易,比如说新创建的MySQL容器可能会替代之前创建的MySQL容器,而此时Tomcat服务器中配置的是之前的MySQL容器的Ip地址,因此随着新容器的创建,之前Tomcat配置的Ip地址需要不断的变更,并重启服务。当有很多Tomcat服务器同时连接MySQL数据库时,这个修改工作就是一个很大的工作量。

    那这个问题如何解决呢?

    容器创建时进行命名,配置连接时不在配置IP地址,而是配置容器的名字,这样以后再创建容器时,只要名字不变,就可以自动连接到新创建的容器。

    举例说明:

    (1)创建web服务

    1
    2
    3
    4
    5
    # 创建容器 运行Tomcat服务 --name 为容器命名



    docker run -d --name webserver tomcat

    (2)创建数据库服务(模拟)

    1
    docker run -d --name database -it centos /bin/bash

    注:命令添加中的-d -it 和/bin/bash 是因为centos容器创建完成后,默认就进入退出状态。如果想让其保持运行状态,后台必须保持一个进程在运行,/bin/bash表示启动容器后启动bash。

    (3)查看正在运行的容器

    img

    (4)查看连个容器的虚拟IP地址

    通过docker inspect [OPTIONS] NAME|ID 命令查看

    docker inspect : 获取容器/镜像的元数据。

    • 首先查看webserver容器的Ip地址
    1
    docker inspect webserver

    img

    • 查看database容器的IP地址
    1
    docker inspect database

    img

    (5)进入webserver容器内容,测试网络

    1
    docker exec -it webserver /bin/bash

    img

    但是直接ping database却是不通的,因为我们并没有进行相应的网络设置,docker并不知道database和哪个IP是对应的,因此我们可以在创建webserver容器时指定webserver到database的单向通信。

    1、容器间单向通信

    移除上面创建的web容器,并重新创建

    1
    2
    3
    4
    5
    6
    7
    # 强制移除webserver容器

    docker rm -f webserver

    # 重新创建webserver容器 --link 要链接的容器名称 (--link 可以使新生成的容器链接到已在运行的容器)

    docker run -d --name webserver --link database tomcat

    img

    Tomcat中的数据库连接配置文件中的url中的IP地址即可换成database

    2、容器间双向通信

    img

    图中的网桥充当了Docker容器和外界宿主机之间的通信源,使得容器内部也可以访问互联网

    例如在webserver内部可以访问百度

    img

    网桥也可以用于容器内部,实现容器间的双向通信。不仅如此网桥还有另一个重要作用,就是对容器从网络层面进行分组

    (1)通过【docker network ls 】列出当前网络状况明细

    img

    上图中列出的bridge即为容器和外界通信的桥梁,如果我们想实现容器内部的双向通信也可以创建一个网桥,具体操作过程如下:

    (2)创建网桥

    1
    2
    3
    4
    5
    6
    7
    # 创建网桥

    docker network create -d bridge my-bridge

    # 执行命令进行查看

    docker network ls

    img

    (3)将需要通信的容器添加到网桥中

    1
    2
    3
    docker network connect my-bridge webserver

    docker network connect my-bridge database

    (4)进入容器进行验证是否能够互相通信

    img

    img

    网桥的原理:创建一个网桥,就相当于在宿主机上安装了一个虚拟网卡,这个虚拟网卡也承担了网关的作用。虚拟网卡和物理网卡之间需要做地址转换

  • 相关阅读:
    [leedcode 104] Maximum Depth of Binary Tree
    [leedcode 103] Binary Tree Zigzag Level Order Traversal
    [leedcode 102] Binary Tree Level Order Traversal
    [leedcode 101] Symmetric Tree
    [leedcode 100] Same Tree
    [leedcode 99] Recover Binary Search Tree
    深入理解java虚拟机---内存分配策略(十三)
    jmeter4.0 源码编译 二次开发
    jmeter源码导入eclipse并执行
    深入理解java虚拟机---垃圾回收(十一)
  • 原文地址:https://www.cnblogs.com/huangjiangyong/p/14089097.html
Copyright © 2011-2022 走看看