准备Dockerfile

FROM java:8 #基于jdk8的环境

COPY *.jar /app.jar #拷贝所有的jar包到/app.jar目录下

CMD ["--server.port=8080"] # 指定服务器端口

EXPOSE 8080 # 暴露8080端口

ENTRYPOINT ["java", "-jar", "/app.jar"] # 启动jar包

准备docker-compose.yml

version: '2.6' # 指定版本,这个版本是docker和docker-compose对应的版本
services:
customapp:
build: . # 构建当前目录下的项目
image: customapp # 镜像
ports:
- "8080:8080" # 端口
depends_on:
- redis # 依赖redis镜像
redis:
image: 'redis:alpine' # redis镜像,精简版

然后搭建基于Springboot的微服务

pom.xml文件如下

<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency> <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency> <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>

其中pom.xml文件中只引用了较少的依赖,包括redis和starter-web。用于搭建springboot项目

application.properties其中内容

server.port=8080 # 暴露端口
# 为何这里指定redis的服务器时,使用的是“redis”,而不是类似于“localhost”那种服务器的信息。
# 是因为部署在docker容器里面时,直接是引用的redis镜像。
spring.redis.host=redis # 指定redis的服务器

一个简单的计数访问页面controller

package com.example.composedemo.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; /**
* @Author: Xiong Feng
* @Date: 2020/8/4 8:53
* @Description:
*/
@RestController
public class HelloController { @Resource
private StringRedisTemplate stringRedisTemplate; @GetMapping("/hello")
public String Hello(){
Long views = stringRedisTemplate.opsForValue().increment("views");
return "Hello Docker Compose, you have views:"+views;
}
}

这个Controller里面就简单引用了redis,并使用redis的缓存实现计数+1

上面准备步骤做好之后,把springboot项目打包成一个jar包,将Dockerfile文件和docker-compose.yml文件,一起放入linux环境下的同一个目录

然后再控制台执行命令

docker-compose up --build

出现如图结果,说明你的简单计数微服务已经成功部署在Docker上了。

每次访问页面,计数器就会+1

使用DockerCompose部署微服务项目(基于Springboot搭建一个简易计数器)的更多相关文章

  1. 庐山真面目之十二微服务架构基于Docker搭建Consul集群、Ocelot网关集群和IdentityServer版本实现

    庐山真面目之十二微服务架构基于Docker搭建Consul集群.Ocelot网关集群和IdentityServer版本实现 一.简介      在第七篇文章<庐山真面目之七微服务架构Consul ...

  2. Docker实战 | 第二篇:IDEA集成Docker插件实现一键自动打包部署微服务项目,一劳永逸的技术手段值得一试

    一. 前言 大家在自己玩微服务项目的时候,动辄十几个服务,每次修改逐一部署繁琐不说也会浪费越来越多时间,所以本篇整理通过一次性配置实现一键部署微服务,实现真正所谓的一劳永逸. 二. 配置服务器 1. ...

  3. linux系统部署微服务项目

    **:如果使用阿里云linux服务器 1.设置容器镜像服务 在阿里云平台搜索 "容器镜像服务" 选择"CentOS" 安装/升级Docker客户端 配置镜像加速 ...

  4. Docker部署微服务项目

    测试包准备工作 1.spring.io或者ide创建demo工程 spring官网 2.本地demo代码,打包成jar包 使用Dockerfile构建微服务镜像 3.将jar包上传到你的vps lin ...

  5. 使用docker-compose运行微服务项目#eureka+config+auth+gateway+module

    微服务架构中我们使用了必须的四个组件,eureka config gateway auth 其中config依赖eureka,auth依赖前两者,gateway又依赖auth 这样就确定了四个组件的启 ...

  6. docker-compose部署微服务

    1.安装docker-compose curl -L https://github.com/docker/compose/releases/download/1.23.2/docker-compose ...

  7. Docker 搭建 ELK 读取微服务项目的日志文件

    思路: 在docker搭建elasticsearch与kibana来展示日志,在微服务部署的机子上部署logstash来收集日志传到elasticsearch中,通过kibana来展示,logstas ...

  8. SpringCloud(1)---基于RestTemplate微服务项目案例

    基于RestTemplate微服务项目 在写SpringCloud搭建微服务之前,我想先搭建一个不通过springcloud只通过SpringBoot和Mybatis进行模块之间额通讯.然后在此基础上 ...

  9. 十一、Docker搭建部署SpringCloud微服务项目Demo

    环境介绍 技术选型:SpringCloud&SpringCloud Alibaba&Docker 微服务模块划分: 员工模块:ems-employees 部门模块:ems-depart ...

  10. Blazor+Dapr+K8s微服务之基于WSL安装K8s集群并部署微服务

         前面文章已经演示过,将我们的示例微服务程序DaprTest1部署到k8s上并运行.当时用的k8s是Docker for desktop 自带的k8s,只要在Docker for deskto ...

随机推荐

  1. 解决Maven资源导出失败问题

    由于 maven 的约定大于配置,maven 约定资源或配置文件放在 resources 目录下才能正常导出,但是如果我们将其放在 java 目录下,就需要在 pom.xml 添加如下配置,才能导出资 ...

  2. shell - scriptreplay timing.log output.session

    script -t 2> timing.log -a output.session cmd cmd cmd exit scriptreplay timing.log output.session ...

  3. 并发多线程学习(五)Java线程的状态及主要转化方法

    1 操作系统中的线程状态转换 首先我们来看看操作系统中的线程状态转换. 在现在的操作系统中,线程是被视为轻量级进程的,所以操作系统线程的状态其实和操作系统进程的状态是一致的. 操作系统线程主要有以下三 ...

  4. windows系统修复

    尝试进入安全模式,然后调整相关启动项或卸载有冲突的软件/驱动 尝试进入PE后使用chkdsk命令修复C分区 尝试进入系统后使用sfc /scannow命令检查修复系统

  5. JSONObject.parseObject syntax error,expect START WITH { OR [,but actually START WITH error

    JSONObject.parseObject syntax error,expect START WITH { OR [,but actually START WITH error解析JSON出现异常 ...

  6. django限制表单上传图片的大小

    django的ImageField没有提供控制上传图片的内置方法,我们可以在表单验证的过程中用clean函数来控制,搬运博客园 python小童鞋 ,可以通过重写ImageField的方法来控制上传图 ...

  7. Golang-Study

    Golang-Study-Note 参考教程视频:狂神说 https://www.bilibili.com/video/BV1ae41157o9?p=1&vd_source=793668372 ...

  8. 深入Alertmanager 概念与配置介绍

    原文: https://www.cnblogs.com/gered/p/13496950.html 警报一直是整个监控系统中的重要组成部分,Prometheus监控系统中,采集与警报是分离的.警报规则 ...

  9. highcharts冷门功能总结

    1.散点图控制点的样式. Highcharts.chart('container', { series: [{ type: "scatter", marker: { fillCol ...

  10. 2022.11.09 NOIP2022 模拟赛六

    科学 Source:CF461C Appleman and a Sheet of Paper,*2200. 注意到对于 \(p\le \lfloor \frac {now}{2}\rfloor\),直 ...