前言
本讲是从Docker系列讲解课程,单独抽离出来的一个小节,单纯的介绍容器之间的通信,它和上一篇容器五种(3+2)网络模式中的自定义网络模式知识点互补。
本文带你的帮助, 让你在了解容器5种网络模式的基础上,对容器之间的通信有更清晰、深刻的了解,这也会后期学好K8s做好基本功铺垫。
概述
同一宿主机内A、B两个容器
单向通信:A需要知道B的存在,B不需要知道A的存在。
双向通信:A/B要相互知道对方的存在,并能正常的互通有无。
该模式,需要使用到上一讲,自定义网络模式的知识点,具体如下
一、容器之间默认桥接模式,基于IP的双向通信
1.容器间通过虚拟IP访问(效果差)
1)分别以桥接模式启动nginx和Tomcat两个容器,并分别赋予别名nginx、tomcat
docker ps -a #实验前,清空干扰容器
docker images #查看本机镜像列表
docker run --name nginx -d nginx:alpine #运行nginx容器
docker run --name tomcat -d -p 8080:8080 tomcat:8.5.46-jdk8-openjdk #运行tomcat容器
2)docker inspect 获取两个容器的Ip地址
docker ps -a #查看正在运行容器列表(主要是获取容器id)
docker inspect 7a #根据容器ID首字母,查看nginx容器详细信息(主要是查看IP) 172.17.0.2
docker inspect 07 #根据容器ID首字母,查看tomcat容器详细信息(主要是查看IP) 172.17.0.3
可以获悉,nginx和tomcat的虚拟IP分别为 172.17.0.2、172.17.0.3
3)docker exec 进入nginx内部,访问tomcat的IP
docker ps
docker exec -it nginx /bin/sh #使用nginx别名,进入nginx容器内部
ping -w 3 172.17.0.3:8080 #ping tomcat的Ip和端口
curl 172.17.0.3:8080
发现,通过IP是可以ping通同一宿主内的其他容器的(这是bridge网络模式的特性)
注:如果你对进入nginx容器内部为什么是/bin/sh不是/bin/bash感兴趣,点击进入。