docker容器间相互通讯

docker容器间相互通讯

实现方式:

1.通过--link命令

  • 1.1先去仓库拉去centos镜像,版本没有什么要求,就按默认latest
docker pull centos

  • 1.2然后创建两个docker容器,分别命名centos1,centos2
docker run -d -it --name centos1 centos
docker run -d -it --name centos2 centos

  • 1.3现在两个容器是ping不通的

  • 1.4 我们使用下面命令创建一个centos3,然后我们用centos2与centos3相互ping对方看下结果
docker run -d -it --name centos3 --link centos2 centos

  • 1.5 我们可以看到centos2不能ping通centos3,但centos3能ping通centos2,由此我们可以知道通过--link命令是单向的,并且官网现在也不推荐使用

  • 1.6 例如,一个容器中跑了一个mysql,另一个容器跑java程序,程序要连接mysql,就可以使用link命令.其中jdbc链接中的db是别名

#容器中的mysql
docker run -d --name mysql mysql镜像:版本
#容器中的java程序
docker run -d --name javaapp --link mysql:db 镜像名:版本 
#容器中的程序配置的jdbc链接,其中db就是别名,也可以其他名称,但必须跟上一步的--link mysql后的名称保持相同.
url: jdbc:mysql://db:3306/test?useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true&useSSL=false

2.通过创建docker network bridge

  • 通过第一种方式,并不能双向通讯,通过bridge我们可以实现双向的一个通讯
  • 2.1 首先查看下都有哪些网络
docker network ls

  • 2.2 创建一个我们自己的bridge

  • 2.3 然后我们在创建容器的时候指定network,可以看到centos4与centos5可以相互ping通.
docker run -d -it --name centos4 --network myBridge centos
docker run -d -it --name centos5 --network myBridge centos

  • 2.4 如果我们使用 centos1 与 centos4和centos5取相互ping呢?可以看到他们互相都ping不通对方

  • 2.5 怎样才能让未加入myBridge中的docker能相互访问呢,我们可以使用connect命令让其加入到myBridge当中,就可以ping通了,所以在创建容器时,如果我们忘记加network参数,后续也可以加上
docker network connect myBridge centos1

posted @ 2021-11-30 18:06  何许人也-h  阅读(251)  评论(0)    收藏  举报