我们以商城项目中的goods-server + mgrsite为例,使用Weave + Docker进行部署
一. 使用assembly 打包项目
由于条件限制,我们就用本机+虚拟机来模拟部署,如果是两台主机只需执行weave connect masterIp 将多个主机加入到weave网络即可
先看一下结构图
注意:
主机IP: 192.168.82.242
虚拟机IP:192.168.217.128
为了验证主机和容器之间的通信,数据库部署在本机,大家也可以直接使用容器部署mysql
zookeeper / redis 使用Docker容器部署, 并且要指定IP, 因为项目中固定了连接的IP
mgrsite 和 goods-server 的IP可以自动分配, 没有影响. 但是因为使用Dubbo, goods-server在启动时会向注册中心注册服务地址, 所以在goods-server项目中配置 spring.dubbo.protocol.host=127.0.0.1 即可不要指定其他IP
两个项目中数据库/redis/zookeeper的配置
#数据库连接地址
spring.datasource.url=jdbc:mysql://192.168.82.242:3306/wolfcode_shop_goods
#注册中中心
spring.dubbo.registry.address=zookeeper://10.32.0.8:2181
# Redis服务器地址
spring.redis.host=10.32.0.9
二. 构建镜像
为每一个项目创建Dockerfile 并执行docker build -t imageName DockerfilePath 构建出镜像: goods-server / mgrsite
Dockerfile文件内容(就只贴一个了,也就改个压缩包名字而已)
#Version: 1.0
#Author: sky <123@126.com>
#基础镜像
FROM airdock/oracle-jdk
#维护者信息
MAINTAINER SKY
ADD shop-goods-server.tar.gz /opt/shop
##进入工作目录
WORKDIR /opt/shop/shop-goods-server
#设置容器启动时默认执行的命令
CMD ["bin/start.sh"]
三. 启动容器
(注意我并没有执行eval(weave env) , 所以此时docker run 启动的容器并没有自动加入weave 网络)
- 启动redis / zookeeper并指定IP (此处我们演示weave,就不再配置数据卷之类的配置)
docker run -d —rm —name redis redis
docker run -d —rm —name zookeeper zookeeper #执行这两个命令之前不要执行 eval $(weave env) , 因为会自动为容器分配ip - 指定 redis / zookeeper 容器ip
假设 redis 容器id : 558a zookeeper 容器id: 999a
weave attach 10.32.0.8/12 zookeeper
weave attach 10.32.0.9/12 redis
指定的ip需要和项目中的配置对应 - 将docker 命令转交weave
eval $(weave env)
以后使用docker启动的容器会自动加入到weave网络并分配ip - 启动 goods-server / mgrsite
docker run -d —rm —name goods-server #会自动分配ip, 假设分配的ip 为10.32.0.3
docker run -d —rm —name -p 8080:8080 mgrsite #第一次启动最好 使用-it 启动可以看到有没有报错
特别注意mgrsite 启动的时候是映射出了8080端口的, 这样外部网络才能通过虚拟机访问到mgrsite - weave expose
将虚拟机加入到weave 网络
这一步并不是必须的,主要为了检查一下goods-server 服务提供有没有问题
执行telnet 10.32.0.3 20880 , 如果能够连接 即为服务提供正常, 也可以执行 ls -l 查看具体服务信息
- 访问
在本机访问项目 :192.168.217.128:8080
可以正常访问,说明部署成功
使用weave 之后, 如果有主机要加入weave 只需 执行 weave connect mastIP 即可加入
主机加入weave网络后可以随意加入Docker容器到weave网络, 即使主机和master主机处于不同网段,容器之间也可以进行通