四、容器间的通信
一、容器之间的单向通信(–link)
1.创建tomcat容器,命名为web:
2.创建数据库容器,命名为database:
3.查看容器原始配置:docker inspect 29902265ebb2
4.进入tomcat容器,ping数据库容器:docker exec -it 21e82183587d /bin/bash
容器间可以直接使用ip地址进行通信,无法使用容器名进行通信。
5.删除tomcat容器,重新创建web容器,指定通信容器:
docker run -d --name web --link database tomcat
6.进入tomcat容器内部,根据容器名通信:
通过容器名通信,有利于容器间的维护,容器间不需要关注容器内部,无论通信容器内部环境是否变化,根据容器名进行访问的请求方不需要改变。
二、Bridge网桥双向通信
1.重新创建web和database容器:
2.列出当前docker网络服务的明细:docker network ls
3.创建指定网络服务的类型(bridge)和ing从my-bridge:
docker network create -d bridge my-bridge
4.将网络服务连接容器:
docker network connect my-bridge web
docker network connect my-bridge database
5.进入database容器内部,使用web容器名进行容器间通信:
6.进入web容器内部,使用database容器名进行容器间通信:
网桥实现原理:
在容器内部创建一个虚拟网卡,容器间通过绑定虚拟网卡进行通信。物理网卡通过地址转换请求虚拟网卡,实现容器外部通信。
三、Volume容器间共享数据
通过Volume实现多个容器之间共享文件,部署集群时有利于维护:
1.通过设置-v挂载宿主机目录
- docker run --name 容器名 -v 宿主机路径:容器内挂载路径 镜像名
- 实例:docker run --name t1 -v /usr/webapps:/usr/local/tomcat/webapps tomcat
通过-v参数设置挂载路径必须保证每次输入的路径都正确,否则挂载失败,容错率低。
2.通过–volumes-from共享容器内挂载点
- 创建共享容器:docker create --name webpage -v /webapps:/tomcat/webapps tomcat /bin/true
说明:/bin/true相当于一个占位符,没有其他含义 - 共享容器挂载点:docker run --volumes-from webapps --name t1 -d tomcat
Volume示例
- -v挂载宿主机目录
1.上传共享文件:
2.创建tomcat容器t1,通过-v挂载宿主机目录
docker run --name t1 -p 8000:8080 -d -v /usr/webapps:/usr/local/tomcat/webapps tomcat
3.浏览器访问页面:
4.进入容器查看挂载的文件:
5.创建第二个tomcat容器t2:
docker run --name t2 -p 8001:8080 -d -v /usr/webapps:/usr/local/tomcat/webapps tomcat
6.访问第二个tomcat容器:
7.进入宿主机共享文件目录,编辑index.html:
8.修改index.html:
9.访问浏览器:
- 共享容器
1.创建共享容器:
docker create --name webpage -v /usr/webapps:/usr/local/tomcat/webapps tomcat /bin/bash
2.创建tomcat容器,共享容器挂载点:
3.浏览器访问: