3.Docker容器间的通信与数据共享.md

本文介绍了Docker容器间的通信方式,包括通过Link实现单项通信,利用Bridge网桥进行双向通信,以及容器间数据共享的方法。详细讲解了--link参数的使用,Bridge网桥的工作原理,以及如何通过Volume和--volumes-from选项共享数据。
摘要由CSDN通过智能技术生成

Docker-第三部分

Docker容器间的通信及容器间数据共享

容器间Link单项通信

单项通信: 在Docker环境下如果有2个容器,由容器A向容器B建立单项的网络连接
比如开发的web应用是在tomcat下,但是需要连接的数据库mysql是在另外一个容器中。tomcat需要连接mysql,但是mysql并不需要知道tomcat的存在,那么就可以建立单项连接进行访问
在这里插入图片描述

docker容器下的虚拟ip

在每个docker环境下,创建容器后,会给创建的容器创建一个虚拟ip,这个ip在外部无法访问,但是在docker容器之间可以互通。但是通过虚拟ip来进行容器访问,有很大的局限性,因为docker run创建容器很容易,每次创建这个容器ip都会发生变化,例如mysql这个容器不用了,新创建一个mysql容器,重新分配了地址,如果tomcat使用虚拟需要修改为新建的mysql的ip才能访问。在大集群环境下,需要修改所有的tomcat配置才能重新访问。所以在容器间进行通信时,一般不使用虚拟ip进行通信,而是通过容器名称进行通信。当新创建的mysql容器和原有的容器同名,不用重启tomcat就可以访问。

–link 容器名容器间的单项通信

启动容器时添加参数 –link 容器名可进行容器间的单项通信,

命令: docker run -d --name 容器自定义名 --link 要连接的容器名 要启动的镜像

演示过程:
  1. 通过 docker run -d --name web 为tomcat创建一个名为web的容器并运行
docker run -d --name web tomcat 
  1. 创建一个基础的centos系统容器,名称为database,-it使用交互模式,使用交互模式是因为centos创建后默认是退出状态。
docker run -d --name database -it centos /bin/bash
  1. docker ps 查询容器运行状态获取容器id
[root@localhost ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED              STATUS              PORTS               NAMES
d0c7e53e5a72        centos              "/bin/bash"         About a minute ago   Up About a minute                       database
b6a4632b9878        tomcat              "catalina.sh run"   12 minutes ago       Up 12 minutes       8080/tcp            web
[root@localhost ~]# 
  1. ** docker inspect 容器id **查询对应容器的原始数据
docker inspect b6a4632b9878

定位到NetworkSettings,在这里可以找到"IPAddress": “172.17.0.2”,说明tomcat的虚拟ip是172.17.0.2

        "NetworkSettings": {
            "Bridge": "",
            "SandboxID": "a74b8c72d78a205b014d9a297eb5124484829658756ddde492990d783a7ac1e2",
            "HairpinMode": false,
            "LinkLocalIPv6Address": "",
            "LinkLocalIPv6PrefixLen": 0,
            "Ports": {
                "8080/tcp": null
            },
            "SandboxKey": "/var/run/docker/netns/a74b8c72d78a",
            "SecondaryIPAddresses": null,
            "SecondaryIPv6Addresses": null,
            "EndpointID": "f7e3aab383d0563fe10349a4147c8f9392740c66aed623ad51c5c137f78d3b4e",
            "Gateway": "172.17.0.1",
            "GlobalIPv6Address": "",
            "GlobalIPv6PrefixLen": 0,
            "IPAddress": "172.17.0.2",
            "IPPrefixLen": 16,
            "IPv6Gateway": "",
            "MacAddress": "02:42:ac:11:00:02",
            "Networks": {
                "bridge": {
                    "IPAMConfig": null,
                    "Links": null,
                    "Aliases": null,
                    "NetworkID": "0f79cf34aedbb7a61eaaccf6134f82bb7d63c3d33583808def2f0293f9e10abd",
                    "EndpointID": "f7e3aab383d0563fe10349a4147c8f9392740c66aed623ad51c5c137f78d3b4e",
                    "Gateway": "172.17.0.1",
                    "IPAddress": "172.17.0.2",
                    "IPPrefixLen": 16,
                    "IPv6Gateway": "",
                    "GlobalIPv6Address": "",
                    "GlobalIPv6PrefixLen": 0,
                    "MacAddress": "02:42:ac:11:00:02",
                    "DriverOpts": null
                }
            }
        }

同样可以查看database的虚拟ip,可以看到daatabase的虚拟ip是"172.17.0.3"

        "NetworkSettings": {
            "Bridge": "",
            "SandboxID": "6ca06aa6c00a2b9e83e7d781eef7b20e37deef81ce0e48e49bd54ee5b21e851c",
            "HairpinMode": false,
            "LinkLocalIPv6Address": "",
            "LinkLocalIPv6PrefixLen": 0,
            "Ports": {},
            "SandboxKey": "/var/run/docker/netns/6ca06aa6c00a",
            "SecondaryIPAddresses": null,
            "SecondaryIPv6Addresses": null,
            "EndpointID": "1459ee53c8aa71725f79509904b5246a7b48a6b01e77fe8e78e5d632d5706748",
            "Gateway": "172.17.0.1",
            "GlobalIPv6Address": "",
            "GlobalIPv6PrefixLen": 0,
            
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值