使用Docker Compose编排微服务
一般微服务架构会包含若干个微服务,而每个微服务可以有多个实例,如果每个微服务都有手动启停,那么效率就很低、维护量比较大。
所以我们可以使用Docker Compose来轻松、高效地管理容器。
一、安装Docker Compose
网上安装方法有很多,附上centos7的链接地址。
二、使用Spring Cloud构建微服务
当然,你也可以使用doubbo框架来构建。项目结构如下图,discovery是服务注册中心,provider是服务生产者,consumer是服务消费者。
本地先启动discovery服务再启动其他两个服务,游览器输入http://localhost:8082/user/test,游览器即可显示用户信息。代码分享到了github,点击这里下载。
三、使用Dockerfile构建镜像文件
虽然使用maven插件来构建Docker镜像更简单一些,但是我是在windows环境下开发的,而docker环境在虚拟机里,所以放弃了。
1.获取服务的jar包
修改每个项目的application.yml配置文件,将eureka.client.service-url.defaultZone这个的域名localhost改为discovery,
因为默认情况下Compose以服务名称作为hostname被其他容器访问,否则其他两个服务无法注册到discovery。
在项目所在目录打开cmd,执行命令mvn clean package 即可获得对应jar包(操作三次),分别是consumer-0.0.1-SNAPSHOT.jar,discovery-0.0.1-SNAPSHOT.jar,provider-0.0.1-SNAPSHOT.jar,
然后上传到l服务器/usr/local/docker目录。
2.构建镜像
cd /usr/local/docker 进入工作目录
vi Dockerfile,内容如图
docker build -t provider:0.0.1 . 完成构建
然后再修改jar包名称 和 端口号,依次构建consumer和discovery。
输入命令docker images -a ,即可查看刚刚构建的镜像。
四、编写docker-compose.yml文件
vi docker-compose.yml
这里需要注意几点:1.ports这个是必须要加的,不然的话容器启动后在宿主机可以访问,但是外网不能访问。百度docker-compose.yml常用命令了解更多。
2.还有一个就是容器间网络访问的问题,使用networks命令自定义网络来使它们处于同一个网络环境。
最后,输入docker-compose up 启动,启动完毕后,在游览器输入http://192.168.75.132:8080/即可看到注册中心(192.168.75.132是我虚拟机的ip):
访问http://192.168.75.132:8082/user/test,即可看到结果(有时候报错,链接超时多试几次)。
至此,大功告成!