spring cloud微服务docker启动
1. 背景
将系统拆分成微服务,一个系统可能拆分成十几个服务,服务太多会影响发布和管理,所以容器话之后易于管理和版本发布,鉴于此将spring cloud微服无docker容器化。
2.依赖环境
Centos7.5,Maven环境 和 Docker环境
本人机器不是Windows系统,直接装的Centos系统,可能系统有差异,Windows下应该也可以,没有具体测试。
3.编写demo程序
@RestController
public class ProviderController { private static Logger logger = LoggerFactory.getLogger(ProviderController.class); @RequestMapping("/hello")
public String hello(){
logger.info("hello debug world "+new Date());
logger.debug("hello debug world "+new Date());
logger.error("hello debug world "+new Date());
return "Hello World";
} }
4.先用maven编译
在编译时会下载相应的依赖jar包。
# 在模块下面,具有pom文件的那层,执行以下命令
mvn clean && mvn install
5.编写Dockerfile
FROM openjdk:-jdk-alpine
VOLUME /tmp
COPY target/*.jar app.jar
ENTRYPOINT ["java","-jar","/app.jar"]
这是一个简单的Dockerfile,
From是需要的依赖,
COPY是将target下编译好的包拷贝到docker虚拟环境的根目录下
ENTRYPOINT是启动后要执行的命令
6.docker命令编译image
docker build -t docker-cloud/provider:1.0 .
编译完成之后执行查看镜像命令,会看到编译出来的镜像,可以制定不同的tag版本。
# 查看docker镜像
docker images
7.启动编译好的镜像
docker run --name provider -p : -d doceker-cloud/provider:1.0
--name 指定启动的容器名称
-p 8090:8090 将本地的8090端口和docker容器的8090端口做映射
-d 是后台运行docker程序
最后面根的是要启动的镜像,我选择启动的是docker-cloud/provider镜像,并且TAG是1.0的版本。
8.启动之后查看docker有没有启动
#查看docker启动的进程
docker ps
9. 启动之后可以看一下容器里面的样子
docker exec -it provider /bin/sh
其中app.jar就是我们打包镜像时拷贝过去的jar文件,logs目录是我打的日志
10.我想看日志怎么办?
在docker里面命令是很有限的,很多命令用不了,像tailf这种命令就没法实时查看日志,所以我们就要把日志文件挂载到磁盘的目录下面。
docker run --name provider -v /home/zhaowei/docker-provider/logs:/logs -d docker-cloud/provider:1.0
-v 就是将目录 /home/zhaowei/docker-provider/logs 挂载到容器的logs目录下,这样产生的日志文件就直接可以在磁盘目录下查看了。
11. 我的想改启动端口怎么办?
spring cloud程序一般可以在applicaiton.properties里指定启动的端口号,但这样有个局限,就是写死了,但是也无所谓,命令行可以指定端口参数,命令行里的参数优先级比配置文件的高,所以在启动的时候指定端口参数就可以了,但是我们的启动参数是写在Dockerfile里面的,所以这里要修改Dockerfile文件了。
FROM openjdk:-jdk-alpine
VOLUME /tmp
COPY target/*.jar app.jar
ENTRYPOINT ["sh","-c","java ${JAVA_OPTS} -jar /app.jar ${0} ${@}"]
我们在启动docker容器时命令是这样的:
docker run --name provider2 -p : -v /home/zhaowei/docker-provider/logs:/logs -d docker-cloud/provider:2.0 --server.port=
12. 其他
demo:https://github.com/liuzwei/docker-app.git
参考:这里是更详细的说明 https://github.com/spring-guides/top-spring-boot-docker
spring cloud微服务docker启动的更多相关文章
- 在阿里云容器服务上开发基于Docker的Spring Cloud微服务应用
本文为阿里云容器服务Spring Cloud应用开发系列文章的第一篇. 一.在阿里云容器服务上开发Spring Cloud微服务应用(本文) 二.部署Spring Cloud应用示例 三.服务发现 四 ...
- 使用Docker Compose编排Spring Cloud微服务
文章目录 微服务构建实例 简化Compose的编写 编排高可用的Eureka Server 编排高可用Spring Cloud微服务集群及动态伸缩 微服务项目名称 项目微服务中的角色 microser ...
- Spring Cloud 微服务六:调用链跟踪Spring cloud sleuth +zipkin
前言:随着微服务系统的增加,服务之间的调用关系变得会非常复杂,这给运维以及排查问题带来了很大的麻烦,这时服务调用监控就显得非常重要了.spring cloud sleuth实现了对分布式服务的监控解决 ...
- spring cloud微服务实践五
本篇我们来看看怎么实现spring cloud的配置中心. 在分布式系统中,特别是微服务架构下,可能会存在许多的服务,每个服务都会存在一个或多个的配置文件.那怎么多的配置文件的管理就会成为一个大问题. ...
- Spring Cloud微服务系列文,服务调用框架Feign
之前博文的案例中,我们是通过RestTemplate来调用服务,而Feign框架则在此基础上做了一层封装,比如,可以通过注解等方式来绑定参数,或者以声明的方式来指定请求返回类型是JSON. 这种 ...
- Spring Cloud 微服务
https://mp.weixin.qq.com/s?__biz=MzU0OTE4MzYzMw==&mid=2247486301&idx=2&sn=f6d45860269b61 ...
- 一张图了解Spring Cloud微服务架构
Spring Cloud作为当下主流的微服务框架,可以让我们更简单快捷地实现微服务架构.Spring Cloud并没有重复制造轮子,它只是将目前各家公司开发的比较成熟.经得起实际考验的服务框架组合起来 ...
- 如何优化Spring Cloud微服务注册中心架构?
作者: 石杉的架构笔记 1.再回顾:什么是服务注册中心? 先回顾一下什么叫做服务注册中心? 顾名思义,假设你有一个分布式系统,里面包含了多个服务,部署在不同的机器上,然后这些不同机器上的服务之间要互相 ...
- Dubbo和Spring Cloud微服务架构比较
Dubbo 出生于阿里系,是阿里巴巴服务化治理的核心框架,并被广泛应用于中国各互联网公司:只需要通过 Spring 配置的方式即可完成服务化,对于应用无入侵,设计的目的还是服务于自身的业务为主. 微服 ...
随机推荐
- 让JPA的Query查询接口返回Map对象
在JPA 2.0 中我们可以使用entityManager.createNativeQuery()来执行原生的SQL语句. 但当我们查询结果没有对应实体类时,query.getResultList() ...
- CF D. Ehab and the Expected XOR Problem 贪心+位运算
题中只有两个条件:任意区间异或值不等于0或m. 如果只考虑区间异或值不等于 0,则任意两个前缀异或值不能相等. 而除了不能相等之外,还需保证不能出现任意两个前缀异或值不等于m. 即 $xor[i]$^ ...
- C++编译错误--C++连接redis:编译错误error C2371: “off_t”: 重定义;不同的基类型
编译错误:对于编译C++调用hiredis编译错误:error C2371: “off_t”: 重定义:不同的基类型,如下图: 可能的解决方案: 1. 因为hiredis预处理器定义了_OFF_T_D ...
- [Hdoj] Fast Matrix Calculation
题面:http://acm.hdu.edu.cn/showproblem.php?pid=4965 题解:https://www.zybuluo.com/wsndy-xx/note/1153981
- php安装扩展的地址
1 查看扩展 phpinfo or extention_loads or php -m 下载扩展地址 http://pecl.php.net or http://windows.php.n ...
- Linux之信号
产生信号五种方法: 按键产生:ctrl+c.ctrl+z.ctrl+\ 系统调用产生:如kill.raise.baort 软件条件产生:如定时器alarm 硬件异常产生:非法访问内存(段错误).除0( ...
- (转)实验文档1:跟我一步步安装部署kubernetes集群
实验环境 基础架构 主机名 角色 ip HDSS7-11.host.com k8s代理节点1 10.4.7.11 HDSS7-12.host.com k8s代理节点2 10.4.7.12 HDSS7- ...
- windows游戏编程键盘
键盘 首先我们来看一下键盘常用消息 键盘的消息处理过程 键盘消息会有击键消息和字符消息 键盘消息的附加参数 wParam:非系统键的虚拟码 lParam: windows常用虚拟键码及对应的按键
- Django基础之中间件的执行流程
当请求到达中间件以后,先按照正序执行每个注册中间件的process_request方法,process_request方法返回的值是None,就依次执行. 如果返回的值是HttpResponse对象, ...
- 【做题记录】Codeforces做题记录
最近决定写一些CF Div.1的题,练习一下速度和代码能力. 暂定从中考后的Codeforces Round #572开始. 大部分比较简单的题直接把题解写在这里,不单独开文章了. Codeforce ...