docker-compose编排springcloud微服务
.创建注册中心Eureka
package com.dan.eurekaserver;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
@EnableEurekaServer
@SpringBootApplication
public class EurekaServerApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaServerApplication.class, args);
}
} *Application.properties:* server.port=8761
eureka.instance.prefer-ip-address=true
eureka.client.register-with-eureka=false
eureka.client.fetch-registry=false #注册地址
eureka.client.serviceUrl.defaultZone=http://eureka:8761/eureka/
2.创建服务提供者 provider
ProviderApplication : package com.hzcf;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
@SpringBootApplication
@EnableEurekaClient
@MapperScan("com.hzcf.mapper")//扫描:该包下相应的class,主要是MyBatis的持久化类.
public class ProviderApplication {
public static void main(String[] args) {
SpringApplication.run(ProviderApplication.class, args);
}
} Controller:
package com.hzcf.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import com.hzcf.model.User;
import com.hzcf.service.UserService; @RestController
public class UserController {
@Autowired
private UserService demoService;
@GetMapping("/findById/{id}")
@ResponseBody
public User findById(@PathVariable Long id){
User user = demoService.findOne(id);
return user;
}
} Service:
package com.hzcf.service; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import com.hzcf.mapper.UserMapper;
import com.hzcf.model.User; @Service
public class UserService { @Autowired
private UserMapper userMapper; public User findOne(Long id) {
return userMapper.findOne(id);
}
}
Mapper:
package com.hzcf.mapper;
import com.hzcf.model.User;
public interface UserMapper {
public User findOne(Long id);
} <?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.hzcf.mapper.UserMapper" >
<resultMap id="BaseResultMap" type="com.hzcf.model.User" >
<id column="id" property="id" jdbcType="BIGINT" />
<result column="name" property="name" jdbcType="VARCHAR" />
<result column="password" property="password" jdbcType="VARCHAR" />
</resultMap>
<select id="findOne" parameterType="long" resultMap="BaseResultMap">
select * from user where id = #{id}
</select>
</mapper> Model:
package com.hzcf.model; public class User { private long id; private String name; private String password; public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
} } Application.properties #端口
server.port=9999
###datasource
########################################################
spring.datasource.url = jdbc:mysql://47.94.11.55:3306/test
spring.datasource.username = root
spring.datasource.password = 824824
spring.datasource.driverClassName = com.mysql.jdbc.Driver
spring.datasource.max-active=20
spring.datasource.max-idle=8
spring.datasource.min-idle=8
spring.datasource.initial-size=10 ####mybatis config ########
mybatis.mapper-location= classpath:com/hzcf/mapper/*.xml spring.application.name=provider
# 注册中心
eureka.client.serviceUrl.defaultZone=http://eureka:8761/eureka/
3.创建服务消费者 customer(用feign调用生产者:)
package com.hzcf;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.cloud.netflix.feign.EnableFeignClients;
@SpringBootApplication
@EnableEurekaClient
@EnableFeignClients
public class CustomerApplication {
public static void main(String[] args) {
SpringApplication.run(CustomerApplication.class, args);
} } Controller:
package com.hzcf.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
import com.hzcf.model.User;
@RestController
public class CustomerController { @Autowired
private CustomerFeignClient customerFeignClient;
@GetMapping("/customer/{id}")
public User findById(@PathVariable Long id) {
return this.customerFeignClient.findById(id);
} } FeignClient:
package com.hzcf.controller;
import org.springframework.cloud.netflix.feign.FeignClient;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod; import com.hzcf.model.User;
@FeignClient("provider")
public interface CustomerFeignClient { @RequestMapping(value = "/findById/{id}", method = RequestMethod.GET)
public User findById(@PathVariable("id") Long id);
}
4.执行命令 生成jar包
clean install -DskipTests
5.构建镜像并启动
将jar包上传到服务器,并分别创建Dockerfile文件 Eureka Dockerfile: #基于哪个镜像
FROM lwieske/java-8
#将本地文件夹挂载到当前容器
VOLUME /tmp
ADD eureka-0.0.1-SNAPSHOT.jar app.jar
RUN sh -c 'touch /app.jar'
ENV JAVA_OPTS=""
#声明暴露的端口
EXPOSE 8761
#配置容器启动后执行的命令
ENTRYPOINT [ "sh", "-c", "java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar /app.jar" ] Provider Dockerfile: #基于哪个镜像
FROM lwieske/java-8
#将本地文件夹挂载到当前容器
VOLUME /tmp
#赋值文件到容器
ADD provider-0.0.1-SNAPSHOT.jar app.jar
RUN sh -c 'touch /app.jar'
ENV JAVA_OPTS=""
#声明暴露的端口
EXPOSE 9999
#配置容器启动后执行的命令
ENTRYPOINT [ "sh", "-c", "java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar /app.jar" ] Customer Dockerfile: #基于哪个镜像
FROM lwieske/java-8
#将本地文件夹挂载到当前容器
VOLUME /tmp
#赋值文件到容器
ADD customer-0.0.1-SNAPSHOT.jar app.jar
RUN sh -c 'touch /app.jar'
ENV JAVA_OPTS=""
#声明暴露的端口
EXPOSE 8763
#配置容器启动后执行的命令
ENTRYPOINT [ "sh", "-c", "java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar /app.jar" ] 创建docker-compose.yml
version: '2'
services:
eureka:
build: ./eureka #指定Dockerfile所在路径
ports:
- "8761:8761" provider:
build: ./provider
ports:
- "9999:9999"
links:
- "eureka" customer:
build: ./customer
ports:
- "8763:8763"
links:
- "eureka"
- "provider"
6.服务器结构图如下

7.启动:
docker-compose up

查看生成的镜像:
docekr images

8.测试
访问注册中心:http://47.94.11.55:8761/
访问消费者:http://47.94.11.55:8763/customer/1
源码链接:https://download.csdn.net/download/qq_35314762/10620879
docker-compose编排springcloud微服务的更多相关文章
- 十一、Docker搭建部署SpringCloud微服务项目Demo
环境介绍 技术选型:SpringCloud&SpringCloud Alibaba&Docker 微服务模块划分: 员工模块:ems-employees 部门模块:ems-depart ...
- 小D课堂 - 新版本微服务springcloud+Docker教程_3-04 SpringCloud微服务核心组件Eureka介绍和闭源后影响
笔记 4.SpringCloud微服务核心组件Eureka介绍和闭源后影响 简介: SpringCloud体系介绍 官方地址:http://projec ...
- 08 . Jenkins之SpringCloud微服务+Vue+Docker持续集成
简介 大致流程 /* 1.开发人员每天把代码提交到Gitlab代码仓库 2.jenkins从gitlab中拉取项目源码,编译并打包成war包,然后构建Docker镜像,将镜像上传到Harbor私有仓库 ...
- Devops 开发运维高级篇之Jenkins+Docker+SpringCloud微服务持续集成(上)
Devops 开发运维高级篇之Jenkins+Docker+SpringCloud微服务持续集成(上) Jenkins+Docker+SpringCloud持续集成流程说明 大致流程说明: 1) 开发 ...
- Devops 开发运维高级篇之Jenkins+Docker+SpringCloud微服务持续集成——部署方案优化
Devops 开发运维高级篇之Jenkins+Docker+SpringCloud微服务持续集成--部署方案优化 之前我们做的方案部署都是只能选择一个微服务部署并只有一台生产服务器,每个微服务只有一个 ...
- Docker、kubernetes、微服务、SpringBoot/Cloud...好乱!到底要不要学?
Docker.微服务日益火热的今天,相信标题上这些名词大家都不陌生.但也相信有很多同学并不够清楚他们的概念,不理解它们的关系,也可能有这样的疑惑:不知道跟我有没有关系?要不要学习?怎么去学习?学哪些东 ...
- QCon技术干货:个推基于Docker和Kubernetes的微服务实践
2016年伊始,Docker无比兴盛,如今Kubernetes万人瞩目.在这个无比需要创新与速度的时代,由容器.微服务.DevOps构成的云原生席卷整个IT界.在近期举办的QCon全球软件开发大会上, ...
- springcloud微服务架构搭建
SpringCloud微服务框架搭建 一.微服务架构 1.1什么是分布式 不同模块部署在不同服务器上 作用:分布式解决网站高并发带来问题 1.2什么是集群 多台服务器部署相同应用构成一个集群 作用:通 ...
- 使用Docker compose编排Laravel应用
前言 Laravel官方开发环境推荐的是Homestead(其实就是一个封装好的Vagrant box),我感觉这个比较重,于是自己用Docker compose编排了一套开发环境,在这里分享下. 环 ...
随机推荐
- linux 命令使用方法(随时更新)
1.hexdump 命令简介:hexdump是Linux下的一个二进制文件查看工具,它可以将二进制文件转换为ASCII.八进制.十进制.十六进制格式进行查看. 命令语法:hexdump: [-bcCd ...
- NEO VM原理及其实现(转载)
NEO Vm原理及其实现 简介及与evm主要区别 neo vm和evm类似.底层都实现了一套opcode以及对应的执行器,opcode设计差距蛮大的,总体上来说evm的更加简洁,neo vm的功能更加 ...
- PHP安全之webshell和后门检测(转)
基于PHP的应用面临着各种各样的攻击: XSS:对PHP的Web应用而言,跨站脚本是一个易受攻击的点.攻击者可以利用它盗取用户信息.你可以配置Apache,或是写更安全的PHP代码(验证所有用户输入) ...
- [LeetCode&Python] Problem 606. Construct String from Binary Tree
You need to construct a string consists of parenthesis and integers from a binary tree with the preo ...
- loadrunner笔记---一
1.Loadrunner主要由Vugen,Controller和Analyais3部分组成 2.简述描述集合点和集合点函数 集合点可以同步虚拟用户,以便能在同一时刻执行任务,集合点函数lr_rende ...
- 2017.4.5 OpenStack简介
OpenStack 管理的资源不是单机的而是一个分布的系统,把分布的计算.存储.网络.设备.资源组织起来,形成一个完整的云计算系统:OpenStack 也提供一个 UI,这里包括一个图形化的 UI:H ...
- 反射,内省,BeanUtil的区别
PS:为了操作反射方便,sun创建了 内省, Apache闲麻烦自己创建了BeanUtils 1.开发框架时,经常需要使用java对象的属性来封装程序的数据,每次都使用反射技术完成此类操作过于麻烦,所 ...
- shell-url-decode
查询每个小时的clk ,然后获取对应的字段 #!/bin/bash urldecode(){ echo -e "$(sed 's/+/ /g;s/%\(..\)/\\x\1/g;')&quo ...
- zeebe 为微服务架构的工作流引擎
zeebe 是灵活.轻量的基于微服务架构的工作流引擎 包含以下特性: 可视化的额工作流 审计日志以及历史 水平缩放 持久化&&容错 消息驱动 操作容易 语言无关 工作流基于标准bpmn ...
- Unity 3D UI Essentials 学习
Chapter 1: Looking Back,LookingForward Chapter 2: Building Layouts Chapter 3: Control, Control, You ...