一个非常好的问题。使用Docker时,宿主机和Docker容器之间、Docker容器和Docker容器之间,都需要进行服务间通信。
一,宿主机和Docker容器之间Docker启动容器时,指定服务端口,比如启动Redis时,端口为6379,这时如果需要访问Redis服务,就使用ip地址:端口,或者直接使用localhost:6379
在需要直接登录到容器时,可以使用docker命令,比如:
docker exec -it data_redis_1 bash其中data_redis_1时容器名称,可以通过docker ps查看当前容器信息:
二,Docker容器之间Docker容器快捷高效部署应用,资源编排定义和运行多个容器,通过docker-compose.yml配置文件声明各个服务,作为一个整体来创建和启动。
那么Docker容器之间怎么通信呢?显然是不应该使用IP地址的,应该使用和配置hostname,如果在不同子网,就增加networks信息。
1,配置hostname
以Redis为例,Redis服务被API服务调用,为Redis配置hostname: cache
2,引用hostname
API服务在application.yml中配置Redis连接信息时,使用hostname指定服务地址:
3,不同子网间配置networks信息
实际使用中经常将服务按照不同类别部署在不同子网中,这时需要指定networks信息。以数据层和接口层为例:
1)部署Redis时,配置networks为data,桥接模式
2)部署API服务时,声明networks信息,data是external外部子网
偶是工作多年的Web应用架构师,陆续发布关于软件开发方面的文章,欢迎关注偶,了解更多IT专业知识。