整体架构

docker环境准备

# linux下的安装,自行百度

# windows docker toolbox下载地址
https://download.docker.com/win/stable/DockerToolbox.exe # 创建myvm3 这个虚拟机内存尽量大,6g以上最好
# https://0eenj1uv.mirror.aliyuncs.com这个是阿里云加速器的地址。
docker-machine create --virtualbox-memory "" --engine-registry-mirror="https://s0iielsh.mirror.aliyuncs.com" --engine-insecure-registry="0.0.0.0/0" -d virtualbox myvm3 # 停止
docker-machine.exe stop myvm3 # 启动
docker-machine.exe start myvm3
docker-machine env myvm3 # windows cmd下 执行下面这个命令,代表当前cmd控制台会使用myvm3中的docker
@FOR /f "tokens=*" %i IN ('docker-machine env myvm3') DO @%i
# windows powershell下 执行下面这个命令,代表当前cmd控制台会使用myvm3中的docker
& "docker-machine.exe" env myvm3 | Invoke-Expression

创建swarm集群

# 创建swarm集群

# 在myvm1中创建一个swarm manage主节点。 linux下直接写IP,windows下写虚拟机IP
docker swarm init --advertise-addr <机器ip> # 创建集群下的网络
docker network create -d overlay --subnet 10.0.0.1/ --attachable swarm_net # 确定集群是否完成,在manage节点上可以看到当前集群有哪些机器。
docker node ls # 添加集群可视化管理的工具portainer,它实际上还是docker提供的命令在干活
# 9001端口,进去后改密码,用户名 admin 密码 tryportainer
docker service create --name docker_portainer --publish : --constraint 'node.role == manager' --mount type=bind,src=/etc/localtime,dst=/etc/localtime --mount type=bind,src=//var/run/docker.sock,dst=/var/run/docker.sock portainer/portainer -H unix:///var/run/docker.sock # 新的节点怎么加入?
# 在manage节点上执行下面这个命令,生成一个用于新manage加入的token。 在新节点中心执行输出的内容可以用于manage加入swarm集群
docker swarm join-token manager
# 在manage节点上执行下面这个命令,生成一个用于worker节点加入的token。在新节点中心执行输出的内容可以用于worker子节点加入swarm集群
docker swarm join-token worker # 如果要退出swarm集群,使用下面这个命令,退出不了就加个 --force
docker swarm leave

部署基础环境

# 一键运行(这些基础中间件是单机部署的)单机和集群两种方式
# swarm集群部署(注:中间件并不是说部署了多个实例就是集群了,要注意。)
docker stack deploy --compose-file .\docker-compose-middleware.yml base

maven配置

<!--修改maven中conf/settings.xml文件-->
<!--servers节点加入docker私有仓库的用户名和密码信息-->
<servers>
<server>
<id>docker-aliyun-hub</id>
<username>用户名</username>
<password>密码</password>
<configuration>
<email>邮箱</email>
</configuration>
</server>
</servers>

构建微服务的docker镜像

# 、添加环境变量,设置docker私有仓库的地址。可以设置永久的,也可以通过下面的命令设置临时的。(永久环境变量的方法自行百度)
# ip记得改成你自己的仓库地址
# windows下powershell临时设置,当前窗口有效
$Env:DOCKER_REGISTRY_URL = "192.168.99.100:5000"
# windows 下cmd临时设置
set DOCKER_REGISTRY_URL=192.168.99.100:
# linux 下临时设置,当前登录session有效
export DOCKER_REGISTRY_URL=192.168.99.100: # 注意:私服需要密码的情况,通过 docker pull 拉取镜像之前,需要先登录 docker login ... # 、通过maven插件打包、构建镜像并推送到私有仓库
# 使用maven打包
mvn clean install
# 将指定的服务 构建镜像 并 推送到私有仓库。 这个一定要在具体的服务下执行
mvn docker:build -DpushImage # mvn clean install docker:build -DpushImage # 管理私有镜像仓库
# 查看镜像,通过http请求
http://192.168.99.100:5000/v2/_catalog
http://192.168.99.100:5000/v2/<镜像名>/tags/list # 删除镜像,这个操作需要在虚拟机内部去操作,喜欢折腾的去做。
# 进入容器内部
# docker exec -it registry bash
# 镜像保存在这个文件夹下,可以手动删除里面的镜像
# /var/lib/registry/docker/registry/v2/repositories/
# 退出容器 exit

部署公共组件

# 公共组件有:eureka、configserver
# 集群模式部署
docker stack deploy --compose-file .\docker-compose-common.yml common-service

部署核心组件

# 核心组件部署
# 基础组件 网关和uaa # 数据库初始化
# 连接mysql服务器,创建uaa-db数据库 # 集群模式部署
docker stack deploy --compose-file .\docker-compose-core.yml core-service # 启动完成以后,往uaa数据库中添加一个用户
INSERT INTO `uaa-db`.`tb_user` (`user_id`, `email`, `password`, `phone`, `user_name`) VALUES ('', '123@qq.com', '', '', 'tony');

部署业务服务

# 业务服务部署
# 订单服务、仓储服务、短信服务、邮件服务 # 数据库初始化
# 连接mysql服务器,创建四个数据库order-db,wms-db,sms-db,mail-db # 集群模式部署
docker stack deploy --compose-file .\docker-compose-service.yml biz-service # 启动完成以后,往wms数据添加一个商品
INSERT INTO `wms-db`.`tb_goods` (`goods_id`, `goods_name`, `sku_id`, `stock_count`, `version`) VALUES ('', '充气玩具', '', '', '');

验证方式

、获取token
post 请求 http://192.168.99.101:8765/api/token/byPhone
{
"phone":"",
"password":""
} 、 http请求时header中设置Authorization的值为上面获取的token内容。
、下单:http://192.168.99.101:8765/api/order-service/order/new/1
返回end代表正常。 检查方式:看数据库有米有数据

集群service扩容/更新方式

# 、通过postainer可视化界面操作

# 、通过命令管理service  文档地址:https://docs.docker.com/engine/reference/commandline/service/
查看集群中所有服务: docker service ls
更新指定的服务: docker service update
服务扩容: docker service scale # 服务栈 - 批量管理service 文档地址:https://docs.docker.com/engine/reference/commandline/stack/
查看所有栈: docker stack ls
查看栈中服务的状态: docker stack ps <stack名称>

其他常用的命令

# 、查看所有docker容器的资源占用情况
docker stats -a # 、看容器执行日志
docker logs -f <容器ID或名称>

maven插件

            <plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>0.4.13</version>
<configuration>
<imageName>${env.DOCKER_REGISTRY_URL}/${project.artifactId}:${project.version}</imageName>
<dockerDirectory>${project.basedir}/src/main/docker</dockerDirectory>
<resources>
<resource>
<targetPath>/</targetPath>
<directory>${project.build.directory}</directory>
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
<!-- 以下两行是为了docker push到DockerHub使用的。 -->
<serverId>docker-aliyun-hub</serverId>
<registryUrl>${env.DOCKER_REGISTRY_URL}</registryUrl>
</configuration>
</plugin>

编排服务

# 业务组件部署
# 订单服务、仓储服务、短信服务、邮件服务 version: "3.2"
services:
# 1、订单服务
order-service:
# 镜像地址
image: 192.168.99.100:5000/order-service:1.0.0
# 容器名称
container_name: order-service
# 端口不对外开放
env_file:
# 加载环境变量
- ./service.env
networks:
# 加入集群网络
- swarm_net
volumes:
# 将宿主机上的文件挂载到容器内
- type: "bind"
source: /etc/localtime
target: /etc/localtime
deploy:
# 实例数量
replicas: 1
# 更新选项
update_config:
# 每次更新多少个容器
parallelism: 1
# 间隔时间
delay: 10s
# 启动错误时,重新启动
restart_policy:
condition: on-failure
resources:
limits:
# CPU限制
cpus: '0.5'
# 内存限制
memory: 256M
# 健康检查,启动后,当这个命令执行没问题,才会任何这个服务启动成功
healthcheck:
# 命令
test: ["CMD", "curl", "-f", "http://localhost:9001/info"]
# 间隔时间,安装应用的预计启动时间来设置。比如我们这个springcloud的应用,一般在1分钟半内预计启动完成
interval: 1m30s
timeout: 10s
# 重试次数
retries: 5 # 2、仓储服务
wms-service:
# 镜像地址
image: 192.168.99.100:5000/wms-service:1.0.0
# 容器名称
container_name: wms-service
# 端口不对外开放
env_file:
# 加载环境变量
- ./service.env
networks:
# 加入集群网络
- swarm_net
volumes:
# 将宿主机上的文件挂载到容器内
- type: "bind"
source: /etc/localtime
target: /etc/localtime
deploy:
# 实例数量
replicas: 1
# 更新选项
update_config:
# 每次更新多少个容器
parallelism: 1
# 间隔时间
delay: 10s
# 启动错误时,重新启动
restart_policy:
condition: on-failure
resources:
limits:
# CPU限制
cpus: '0.5'
# 内存限制
memory: 256M
# 健康检查,启动后,当这个命令执行没问题,才会任何这个服务启动成功
healthcheck:
# 命令
test: ["CMD", "curl", "-f", "http://localhost:9002/info"]
# 间隔时间,安装应用的预计启动时间来设置。比如我们这个springcloud的应用,一般在1分钟半内预计启动完成
interval: 1m30s
timeout: 10s
# 重试次数
retries: 5
# 3、短信服务
sms-service:
# 镜像地址
image: 192.168.99.100:5000/sms-service:1.0.0
# 容器名称
container_name: sms-service
# 端口不对外开放
env_file:
# 加载环境变量
- ./service.env
networks:
# 加入集群网络
- swarm_net
volumes:
# 将宿主机上的文件挂载到容器内
- type: "bind"
source: /etc/localtime
target: /etc/localtime
deploy:
# 实例数量
replicas: 1
# 更新选项
update_config:
# 每次更新多少个容器
parallelism: 1
# 间隔时间
delay: 10s
# 启动错误时,重新启动
restart_policy:
condition: on-failure
resources:
limits:
# CPU限制
cpus: '0.5'
# 内存限制
memory: 256M
# 健康检查,启动后,当这个命令执行没问题,才会任何这个服务启动成功
healthcheck:
# 命令
test: ["CMD", "curl", "-f", "http://localhost:9005/info"]
# 间隔时间,安装应用的预计启动时间来设置。比如我们这个springcloud的应用,一般在1分钟半内预计启动完成
interval: 1m30s
timeout: 10s
# 重试次数
retries: 5
# 4、邮件服务
mail-service:
# 镜像地址
image: 192.168.99.100:5000/mail-service:1.0.0
# 容器名称
container_name: mail-service
# 端口不对外开放
env_file:
# 加载环境变量
- ./service.env
networks:
# 加入集群网络
- swarm_net
volumes:
# 将宿主机上的文件挂载到容器内
- type: "bind"
source: /etc/localtime
target: /etc/localtime
deploy:
# 实例数量
replicas: 1
# 更新选项
update_config:
# 每次更新多少个容器
parallelism: 1
# 间隔时间
delay: 10s
# 启动错误时,重新启动
restart_policy:
condition: on-failure
resources:
limits:
# CPU限制
cpus: '0.5'
# 内存限制
memory: 256M
# 健康检查,启动后,当这个命令执行没问题,才会任何这个服务启动成功
healthcheck:
# 命令
test: ["CMD", "curl", "-f", "http://localhost:9003/info"]
# 间隔时间,安装应用的预计启动时间来设置。比如我们这个springcloud的应用,一般在1分钟半内预计启动完成
interval: 1m30s
timeout: 10s
# 重试次数
retries: 5 networks:
swarm_net:
external: true

Docker集群部署SpringCloud应用的更多相关文章

  1. 27.Docker集群部署

    对于scrapy的部署方式 1.Scrapyd 安装扩展组件,远程控制scrapy任务,包括部署源代码,启动任务,监听任务.scrapy-client .scrapyd api 协助完成部署和监听操作 ...

  2. RocketMQ(2)---Docker集群部署RocketMQ

    RocketMQ(2)-Docker集群部署RocketMQ =前言= 1.因为自己只买了一台阿里云服务器,所以RocketMQ集群都部署在单台服务器上只是端口不同,如果实际开发,可以分别部署在多台服 ...

  3. Spring Eureka 本地Docker集群部署

    故事背景 最近因为产线使用的服务与发现服务,使用的是Spring Cloud Eureka集群部署,为了以后调试产线的问题,想在本地搭建和产线一样的环境.产线的所有服务都是基于K8s和Docker部署 ...

  4. Clickhouse Docker集群部署

    写在前面 抽空来更新一下大数据的玩意儿了,起初架构选型的时候有考虑Hadoop那一套做数仓,但是Hadoop要求的服务器数量有点高,集群至少6台或以上,所以选择了Clickhouse(后面简称CH). ...

  5. Kubernetes&Docker集群部署

    集群环境搭建 搭建kubernetes的集群环境 环境规划 集群类型 kubernetes集群大体上分为两类:一主多从和多主多从. 一主多从:一台Master节点和多台Node节点,搭建简单,但是有单 ...

  6. docker集群部署

    一.使用自定义网桥连接跨主机容器 要是Linux可以工作在网桥模式,必须安装网桥工具bridge-utils,运行命令:# yum install bridge-utils 查看桥连状态:# brct ...

  7. Nacos Docker集群部署

    参考文档:https://nacos.io/zh-cn/docs/quick-start-docker.html 1.从git上下载nacos-docker项目,本地目录为/docksoft/naco ...

  8. 使用Docker构建持续集成与自动部署的Docker集群

    为什么使用Docker " 从我个人使用的角度讲的话  部署来的更方便 只要构建过一次环境 推送到镜像仓库 迁移起来也是分分钟的事情 虚拟化让集群的管理和控制部署都更方便 hub.docke ...

  9. Docker集群管理工具 - Kubernetes 部署记录 (运维小结)

    一.  Kubernetes 介绍 Kubernetes是一个全新的基于容器技术的分布式架构领先方案, 它是Google在2014年6月开源的一个容器集群管理系统,使用Go语言开发,Kubernete ...

随机推荐

  1. SQL SERVER占用CPU过高优化S

    https://www.cnblogs.com/yuekong2010/p/6628001.html 然后使用下面语句看一下各项指标是否正常,是否有阻塞,正常情况下搜索结果应该为空. 1 SELECT ...

  2. ExpressRoute 常见问题

    什么是 ExpressRoute? ExpressRoute 是一项 Azure 服务,允许在 Microsoft 数据中心与本地环境或共同租用设施中的基础结构之间创建专用连接. ExpressRou ...

  3. CSS标准文档流 块级元素和行内元素

    标准文档流 什么是标准文档流 宏观的将,我们的web页面和ps等设计软件有本质的区别,web 网页的制作,是个“流”,从上而下 ,像 “织毛衣”.而设计软件 ,想往哪里画东西,就去哪里画 空白折叠现象 ...

  4. Apache配置支持目录浏览

      主配置文件 httpd.conf 中修改: 1)添加支持模块 LoadModule autoindex_module modules/mod_autoindex.so LoadModule dir ...

  5. flash 动画展示

  6. ASP.NET Core 添加静态目录访问、使其它目录可被访问

    使用app.UseFileServer 在 public void Configure(){}中,修改或添加 app.UseFileServer(new FileServerOptions() { F ...

  7. August 29th 2017 Week 35th Tuesday

    Life is a pure flame, and we live by an invisible sun within us. 生命如纯洁的火焰,而维系这火焰的是我们内心的太阳. Burn my l ...

  8. 把所有的小图标一起做成雪碧图吧 请用gulp-css-spriter.

    用gulp-css-spriter很简单. 第一步: 在某个文件夹用shitf+鼠标右键 第二步: npm install gulp-css-spriter https://www.npmjs.com ...

  9. ECharts.js学习(二)动态数据绑定

    Echarts 数据绑定 简单的统计表已经可以生成,不过之前图标数据都是直接写在参数里面的,而实际使用中,我们的数据一般都是异步读取的.EChart.js对于数据异步读取这块提供了异步加载的方法. 绑 ...

  10. [T-ARA][20090729]

    歌词来源:http://music.163.com/#/song?id=484058959 在基本发音规则之上,考虑到了音变的某些情况,最后结合听力搞定的一版歌词发音(只要学完养乐多老师的教程应该读起 ...