从零开始搭建腾讯云上的 SpringBoot 容器化应用
欢迎大家前往云+社区,获取更多腾讯海量技术实践干货哦~
作者:李想
由于最近容器技术的火热,各大云计算厂商都已经提供了独立的容器服务,腾讯云也不例外。腾讯云容器服务的官方文档提供了一个基于Node.js的简单案例供大家上手,考虑到官方的文档并没有提供基于Java的上手教程,再加上容器/微服务技术在Java领域的各种衍生开源组件--如SpringCloud家族的各种神器应用极其广泛,今天有空拿一个简单的带增删改查接口功能的SpringBoot应用外接腾讯云CDB for MySQL来把玩容器服务,正好以此来演示如何从零开始在腾讯云上搭建基于SpringBoot的容器化应用。关于为啥选用SpringBoot框架,我想原因也不必多说,主要还是因为其本身就是一个为容器而生的框架,自带Tomcat服务器而且能以极简的配置构建web服务(相对于SpringMVC而言)。
这里以一个提供用户管理的微服务为例进行搭建,为了简化步骤仅考虑用户数据的增删改查功能不考虑实际业务逻辑。微服务本身基于SpringBoot框架,数据库保存在腾讯云CDB for MySQL上,同时利用Spring的JPA作为ORM框架,最终发布可以对用户数据进行增删改查的Restful接口。
1. 创建SpringBoot 项目
IntelliJ Idea默认可以创建SpringBoot应用,新建项目里面选择Spring Initializer。
创建SpringBoot项目
修改对应的名字,我们这里就叫UserProvider
项目配置
修改项目的组织架构如图所示,各部分功能如下:
- Controller/UserProviderController.java: HTTP请求的监听入口,为了简化程序不再写Service层,直接调用DAO层
- DAO/UserInfoDao.java: DAO层,直接使用JPA实现
- Model/UserProviderApplication.java: entity层,映射到数据库,为了简化程序只定义了名字,年龄,性别几个字段
项目组织架构
代码本身不再做过多的解释,都是最基础的SpringBoot代码,大家可以从下面的地址获取代码。https://github.com/xianl/UserProvider
需要提到的是application.yml文件和项目根目录下的MAVEN配置文件pom.xml。
application.yml 中通过${userprovider_mysql} 来获取环境变量中配置好的数据库地址传给jdbc,后面会演示如何通过腾讯云的容器服务来传入这个参数到容器内。
server:port: 8090 spring:jpa:hibernate:ddl-auto: createdatasource:url: jdbc:mysql://${userprovider_mysql}/userdbusername: springuserpassword: Test01! info:app:name: @project.artifactId@encoding: @project.build.sourceEncoding@java:source: @java.version@target: @java.version@
pom.xml 需要引入JPA和mysql的依赖包,同时加入docker-maven-plugin用于直接打包生成docker镜像。
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin><plugin><groupId>com.spotify</groupId><artifactId>docker-maven-plugin</artifactId><configuration><imageName>userprovider</imageName><baseImage>java</baseImage><entryPoint>["java", "-jar", "/${project.build.finalName}.jar"]</entryPoint><resources><resource><targetPath>/</targetPath><directory>${project.build.directory}</directory><include>${project.build.finalName}.jar</include></resource></resources></configuration></plugin></plugins></build>
首先在本地进行调试,创建userdb数据库并赋予用户springuser对数据库的访问权限。同时需要设置本地环境变量userprovider_mysql的值为127.0.0.1。
mysql> create database userdb; Query OK, 1 row affected (0.00 sec)mysql> create user 'springuser'@'%' identified by 'Test01!'; Query OK, 0 rows affected (0.00 sec)mysql> grant all on userdb.* to 'springuser'@'%'; Query OK, 0 rows affected (0.00 sec)
访问本地的8090端口,调用add接口插入一条数据,再次通过Users接口可以获取之前插入的数据。表明程序本身没有问题,本地调试成功之后可以进行后续的操作。
本地调试
2. 生成docker镜像并上传到腾讯云镜像仓库
在一台安装好git+java+maven+docker的Linux主机上执行下面的命令生成docker镜像。由于我们的application.yml文件需要读取环境变量来获取数据库的地址,所以我们在打包jar包和docker镜像的时候需要指定参数-DskipTests,否则在测试的时候会报数据库连接的错误。
cd /opt git clone https://github.com/xianl/UserProvider.git cd UserProvider mvn clean package docker:build -DskipTests
执行docker images 可以看到刚才生成的userprovider镜像。
[root@VM_1_13_centos ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE userprovider latest 53cdf5acf3a4 2 hours ago 673.6 MB docker.io/java latest d23bdf5b1b1b 11 months ago 643.1 MB
腾讯云的镜像仓库服务是包含在容器服务内而不像其他云厂商专门列出一项服务,使用前需要先开通。
开通镜像服务
通之后按照惯例先login再打tag最后上传。
[root@VM_1_13_centos UserProvider]# docker login --username=xxxxxxxxx ccr.ccs.tencentyun.comPassword: Login Succeeded[root@VM_1_13_centos UserProvider]# docker tag userprovider:latest ccr.ccs.tencentyun.com/mydocker/userimage:0.0.1[root@VM_1_13_centos UserProvider]# docker imagesREPOSITORY TAG IMAGE ID CREATED SIZEccr.ccs.tencentyun.com/mydocker/userimage 0.0.1 53cdf5acf3a4 13 minutes ago 673.6 MBuserprovider latest 53cdf5acf3a4 13 minutes ago 673.6 MBdocker.io/java latest d23bdf5b1b1b 11 months ago 643.1 MB[root@VM_1_13_centos UserProvider]# docker push ccr.ccs.tencentyun.com/mydocker/userimage:0.0.1The push refers to a repository [ccr.ccs.tencentyun.com/mydocker/userimage]04e86a77317a: Pushed 35c20f26d188: Pushed c3fe59dd9556: Pushed 6ed1a81ba5b6: Pushed a3483ce177ce: Pushed ce6c8756685b: Pushed 30339f20ced0: Pushed 0eb22bfb707d: Pushed a2ae92ffcd29: Pushed 0.0.1: digest: sha256:30361f7235797976d196473374a4b16c39fe614753d1801b329be7ea55a7e6fa size: 2212
登录管理界面也能看到刚才上传的userimage镜像。
镜像列表
3. 搭建容器群集并部署服务
腾讯云上的容器集群搭建非常之简单,可以任意添加新建的节点甚至已有的CVM虚拟机。具体步骤我这里不再赘述,官方文档上写的都很清楚大家可以查看。
群集管理
同时我们在容器集群所在的VPC内部再建立一台Mysql数据库,按照之前处理本地数据库的步骤同样创建userdb数据库和用户springuser,数据库的内网地址为10.98.1.9,后面我们需要把这个地址传进容器服务里。
MySQL实例
对于k8s集群,一般来说我们可以使用kubectl来下发如下的yml文件来进行部署,yml文件中主要指定了镜像的地址,端口号以及我们需要配置的环境变量等。
---apiVersion: apps/v1beta1kind: Deploymentmetadata:name: userproviderspec:replicas: 1template:metadata:labels:app: userproviderspec:containers:- name: userproviderimage: ccr.ccs.tencentyun.com/mydocker/userimage:0.0.1ports:- containerPort: 8090env:- name: userprovider_mysqlvalue: 10.98.1.9---apiVersion: v1kind: Servicemetadata:name: userproviderspec:type: NodePortports:- nodePort: 30010port: 8090targetPort: 8090selector:app: userprovider
腾讯云容器服务为用户提供了更为方便的操作方法,只需在添加服务界面进行一定配置就能进行服务部署,等于是把ymal文件的配置做了可视化,减轻了用户的工作量。
注意一下环境变量的部分,我们这里指定了userprovider_mysql为我们内网数据库的地址10.98.1.9。
新建容器服务
因为我们选取了发布服务到公网,系统会自动创建LB将公网端口8080映射到容器的服务端口8090, 查看LB详情可以看到自动生成的域名。
LB详情
通过访问绑定的域名的8080端口,接口测试成功。
通过LB接口测试
总结
从上面的测试步骤可以看到,腾讯云的容器服务从最大程度上做到了人性化,用户甚至可以在完全不用登陆群集节点的情况下快速进行容器服务部署。同时腾讯云容器服务本身就是基于k8s做服务编排并兼容kubernetes标准API,又使得其通用性和易用性更强。本例提供的生成镜像的方法还是以手动为主,在客户的实际环境中如果结合Jenkins等CI/CD的工具就能够进一步提高效率和自动化程度。另外本文未提及的日志管理、监控告警功能也能为用户提供更多的便利,使开发人员将时间更多的投入在业务逻辑本身,也使运维人员能更多的把时间投入在应用本身的异常上面。
相关阅读
使用腾讯云无服务器云函数(SCF)分析天气数据
容器服务:来自外部的问好!
有状态应用的容器化
此文已由作者授权云+社区发布,转载请注明原文出处
从零开始搭建腾讯云上的 SpringBoot 容器化应用相关推荐
- 从零开始搭建腾讯云上的SpringBoot容器化应用
首发于:https://cloud.tencent.com/developer/article/1017063 由于最近容器技术的火热,各大云计算厂商都已经提供了独立的容器服务,腾讯云也不例外.腾讯云 ...
- 从零开始搭建腾讯云服务器
1.重置密码 2.通过远程工具连接服务器ip(公网ip),我用的是MobaXterm 4.在home目录下, 创建acptuser用户,并设置acptuser的用户密码: [root@VM-16-3- ...
- 上传excel腾讯云服务器,使用SpringBoot上传文件到腾讯云
最近在做一个项目,涉及到腾讯云上传文件/图片到服务器,为了图方便并且提升访问速度,想着上传到腾讯云存储桶是一个不错的选择.腾讯云存储桶的创建可见我之前的文章. 当然存储桶里面不仅可以存图片,也可以存储 ...
- 一键搭建微信小程序开发环境 及demo运行(腾讯云上一键搭建node.js服务器环境,PHP,Java,.NET服务类似)
一.首先准备下本地环境(本地就需要一个微信开发工具) 1.首先得有一个微信小程序账号,登陆微信小程序首页:mp.weixin.qq.com,点击右上角立即注册. 注册登陆后,首页填写一些小程序基本信息 ...
- 在腾讯云上创建您的SQL Cluster(3)
2019独角兽企业重金招聘Python工程师标准>>> 版权声明:本文由李斯达原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/communi ...
- 腾讯云上的个人网站建立
第一次在网上有了自己的个人空间(有点小激动),写点废话留个纪念,然后顺便记录一下主要的流程 先在腾讯云上申请学生认证,然后领取服务器和域名的代金券,(这里说明一下,腾讯云服务器原价一个月65RMB,域 ...
- 云服务器架设网站教程_手把手教你搭建腾讯云服务器入门(图文教程)
本文由博主 威威喵 原创 博客主页:https://blog.csdn.net/smile_running 背景 暑假期间,愁着无聊但也不能荒废学业吧,毕竟以后想靠技术混口饭吃!为了实施自己的计划,特 ...
- 手把手教你搭建腾讯云服务器
手把手教你搭建腾讯云服务器(图文并茂) 威威貓 2019-03-28 08:10:28 58357 收藏 162 分类专栏: 杂七杂八 文章标签: 服务器搭建 腾讯云服务器 云服务器环境配置 新手 ...
- 搭建腾讯云服务器(详细+最新教程)
搭建腾讯云服务器 准备好工具(购买腾讯云服务器,准备putty.FileZilla.jdk.tomcat) 进行远程连接 安装jdk和tomcat 修改端口 准备好工具(购买腾讯云服务器,准备putt ...
最新文章
- pip install 豆瓣源、清华源、阿里源、中国科技大学源
- java怎么保存文件_java里数据怎么保存到硬盘或TXT文件里去
- Redis介绍及部署在CentOS7上(一) 1
- MySQL——多表查询练习:电商数据查询
- oracle cast multiset table 语法演示
- 更换ubuntu的root的默认python版本
- 索尼录音笔怎么导出录音内容_录音笔十大品牌名单出炉!录音笔十大品牌排名榜单揭晓!...
- java怎么获取该项目系统的参数_Java 获取系统参数
- java开发工程师学什么专业,Java核心知识点
- QPS 提升60%,揭秘阿里巴巴轻量级开源 Web 服务器 Tengine 负载均衡算法
- Jquery append 方法在ie8不兼容问题
- 【零基础学Java】—this关键字的三种用法+Java继承的三个特点(二十一)
- 轻量函数式 JavaScript:十、函数式异步
- 电脑计算机里怎么找恢复出厂设置,普通电脑怎么恢复出厂设置
- System.IO.Path 操作
- 最新Spring下载网址
- java 任务链模式,flink部署运行架构
- 在国产银河麒麟v10操作系统下安装亿图图示(VISIO替代品)
- vim字符串替换命令
- 苹果Mac3D建模软件SketchUp Pro很专业
热门文章
- 苹果手机在哪里清理内存_苹果手机这样清理垃圾,能释放大量内存,难怪别人iPhone能用5年...
- i5 10210u和i7 7700hq 的差别有多大
- 全国计算机等级考试二级web程序设计公共知识点
- Cubemap应用之反射,折射,菲涅耳反射
- lol自动修复连接服务器失败,英雄联盟自动修复的操作方法步骤
- Windows10桌面只有 回收站 没有我的电脑
- argsort_numpy中argsort函数用法
- Pubes(AE多边形线条生成插件)v1.0版本更新
- 学生党福利!学习python电脑及配置大盘点,游戏学习两不误
- html+css+jquery 实现超帅留言墙效果!超帅,不喜勿喷!