当前位置: 首页 > article >正文

docker容器间基于Link单向通信

情景概述

在进行Java开发时,一般会部署两台服务器,一个是Tomcat,一个是数据库。 

对应到docker环境,会在一台物理机上,部署docker,在docker中运行两个容器,分别是Tomcat容器和数据库容器。当两个容器都启动后,docker会自动为每个容器赋予ip地址。这两个容器可以通过ip地址互相访问。

直接通过ip访问会有一些局限性,比如在项目刚上线的时候通过ip访问,后期如果要更换容器,假如MySQL容器被更换为了一个新的MySQL容器。ip地址由原来的107.1.31.24变为了107.1.31.25。此时Tomcat容器访问的ip还是107.1.31.24,这时候就需要去更改Tomcat容器中的配置。

在大集群应用中,如果存在几百个容器,每个都去一 一更换,将非常麻烦。所以利用ip访问容器的方式,不是最好的方式。

取而代之的方式是为每个容器赋予独立的名称。通过名称去访问,当ip发生变化,只要容器名称不变,不需要更改访问配置。

如下图所示,Tomcat会访问MySQL容器获取数据,MySQL一般不会去访问Tomcat容器,这种形式的访问,称为单项访问。针对单向访问,可以使用link技术,完成使用容器名称而不是ip来访问的工作。

使用容器ip访问案例

1创建一个容器,名称为mydb

docker run --name mydb -d centos sleep 1d

mydb这个容器是基于centos镜像创建的一个名称为mydb的容器(只是为了模拟演示,并不是一个真实的数据库容器)。

sleep 1d 表示在该容器创建1天后退出。也就是说,这个容器启动后,会执行sleep 1d命令,让容器处于 “睡眠” 状态一天。用于一些简单的测试场景,比如只想让容器保持运行状态一段时间来检查资源占用等情况,或者作为一个简单的占位,后续再通过其他方式进入容器并执行更有意义的操作。


2.查看容器信息

docker ps

3.获取指定容器的详细信息

docker inspect 容器编号

可以看到容器的ip为:172.17.0.5

4.再创建一个容器,名称为myweb

docker run --name myweb -d centos sleep 1d

5.查看容器信息

docker ps

6.查看新容器的详细信息

容器ID:172.17.0.6

7.进入myweb容器

docker exec -it f1398936d154 /bin/bash

进入之后,ping一下mydb这个容器的ip

ping 172.17.0.5

可以看到,这两个容器,可以通过ip进行互联。

通过ip访问并不是推荐的访问方式,回到开头所说的,ip可能会更换,如果更换ip就要去重新配置相关的参数,比较麻烦,使用link来完成根据名称的访问。

使用容器名称访问案例

有一种解决方法就是通过link,将myweb这个web应用,单项连接到mydb上。具体操作如下:

1.先把myweb容器删除

docker rm -f  f1398936d154

2.重新创建名称为myweb的容器,并连接到mydb容器

docker run --name myweb --link mydb -d centos sleep 1d

 

3.查看已有容器

4.进入到myweb容器内部

docker exec -it 9ebbbdf075b5 /bin/bash

5.然后ping mydb

这次没有ping mydb这个容器的ip地址,而是直接ping mydb这个容器名称,发现也可以ping通。这就是设置了link的作用。

6.尝试在mydb中ping myweb

此时进入到mydb容器里面,然后ping myweb

发现是ping不通的,如果要在mydb中用容器名称的方式ping通myweb容器,这个就涉及到容器之间的双向通信。

容器之间的双向通信,在下一个文章中介绍。


http://www.kler.cn/a/467023.html

相关文章:

  • STLG_01_10_程序设计C语言 - 字符串
  • 常见的框架漏洞复现
  • spring mvc源码学习笔记之六
  • CoppeliaSim和Python进行无人机联合仿真
  • trendFinder - 利用 AI 掌握社交媒体上的热门话题
  • conan从sourceforge.net下载软件失败
  • 搭建macOS虚拟机环境
  • 【C++】你了解异常的用法吗?
  • ASA第六天笔记
  • 怎样认识camera-ISP
  • Linux(Centos 7.6)命令详解:ls
  • 不锈钢均温板结合强力粘合技术革新手机内部架构
  • Java100道面试题
  • GaussDB逻辑解码技术原理深度解析
  • 使用JMeter玩转tidb压测
  • df.replace(regex={‘b‘: {r‘\s*\.\s*‘: np.nan}})
  • Java项目实战II基于小程序的驾校管理系统(开发文档+数据库+源码)
  • 如何判断状态:停留还是移动。【计算加速度de方案】
  • 计算机网络——数据链路层-功能、组帧和差错控制
  • 博客标题:使用Go和RabbitMQ构建高效的消息队列系统
  • IEEE PDF eXpress遇到Font TimesNewRomanPSMT is not embedded的解决方案
  • Android 性能优化:内存优化(实践篇)
  • 以太网ICMP协议(ping指令)——FPGA学习笔记25
  • 文献阅读 | B. S. Carmo 2010
  • springcloud篇3-docker需熟练掌握的知识点
  • leetcode hot 100 分割等和子集