简介
将基于spring cloud的微服务架构应用于docker swarm mode,基本系统结构图:
所需基础知识
- docker、docker compose、docker machine
- docker swarm mode
- spring cloud
环境简介
- 三台CentOS7 VM:reg(192.168.245.137)、docker1(192.168.245.139)、docker2(192.168.245.140)
- Win7:安装了dockertoolbox,使用docker-machine管理三台docker宿主机
工程实例
docker-machine管理三台VM
在win7的“Docker Quickstart Terminal”中分别执行以下命令:
docker-machine -D create -d generic --generic-ip-address=192.168.245.137 --engine-registry-mirror=https://registry.docker-cn.com reg --engine-insecure-registry=myrepo.com:5000
docker-machine -D create -d generic --generic-ip-address=192.168.245.139 --engine-registry-mirror=https://registry.docker-cn.com docker1 --engine-insecure-registry=myrepo.com:5000
docker-machine -D create -d generic --generic-ip-address=192.168.245.140 --engine-registry-mirror=https://registry.docker-cn.com docker2 --engine-insecure-registry=myrepo.com:5000
说明:
- 如果创建过程很慢,请手动在三台机子上安装docker后,再执行上述命令进行关联。
- 使用Docker中国官方镜像加速
- 使用http模式下的私有仓库
- 创建成功后,使用
docker info
查看Registry Mirrors和Insecure Registries是否配置成功。
创建集群
切换到reg
eval $(docker-machine env reg)
初始化reg为管理节点:
docker swarm init
查看工作节点的join-token
docker swarm join-token worker
加入工作节点:
docker-machine ssh docker1 docker swarm join --token SWMTKN-1-0yuuj2o7mi6gzcy54u6ayhqwr0989u2cb3xbswbc94k4pmcqmi-48q7mw60esyl18ttgwo07t870 192.168.245.137:2377
docker-machine ssh docker2 docker swarm join --token SWMTKN-1-0yuuj2o7mi6gzcy54u6ayhqwr0989u2cb3xbswbc94k4pmcqmi-48q7mw60esyl18ttgwo07t870 192.168.245.137:2377
查看节点:
$ docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS
aom77kgv9y530n63c6schlebl docker2 Ready Active
h6p4tp2uozk2xd2bwpnue05pl * reg Ready Active Leader
te527c08gqbipwhdcv8aa3bab docker1 Ready Active
集群已创建成功。
制作镜像,存入私有仓库
为什么使用私有仓库
因为在创建service时,swarm manager会下发task到各个node上去执行,这样每个node都会去pull相同的镜像,重复操作,如果使用外网会很耗时间,所以必须先搭建私服。
本文中使用的镜像都是预先pull后再push到私有仓库的
1.制作基础镜像
Dockerfile:
FROM openjdk:8-jre-alpine
# Install base packages
RUN apk update && apk add curl bash tree tzdata \
&& cp -r -f /usr/share/zoneinfo/Hongkong /etc/localtime \
&& echo -ne "Alpine Linux 3.6 image. (`uname -rsv`)\n" >> /root/.built
# Install dockerize
RUN apk add --no-cache openssl
ENV DOCKERIZE_VERSION v0.5.0
RUN wget https://github.com/jwilder/dockerize/releases/download/$DOCKERIZE_VERSION/dockerize-alpine-linux-amd64-$DOCKERIZE_VERSION.tar.gz \
&& tar -C /usr/local/bin -xzvf dockerize-alpine-linux-amd64-$DOCKERIZE_VERSION.tar.gz \
&& rm dockerize-alpine-linux-amd64-$DOCKERIZE_VERSION.tar.gz
# Define bash as default command
CMD ["/bin/bash"]
添加常用工具,修正时区,dockerize(容器启动检测),构建镜像并存入私服:
docker build -t myrepo.com:5000/openjdk:dockerize .
docker push myrepo.com:5000/openjdk:dockerize
2.高可用服务注册发现及配置中心
使用jhipster-registry进行搭建,详介请看:http://www.jhipster.tech/jhipster-registry/
cd /swarm-spring-cloud-test/jhipster-re