首发于:https://cloud.tencent.com/developer/article/1017063

由于最近容器技术的火热,各大云计算厂商都已经提供了独立的容器服务,腾讯云也不例外。腾讯云容器服务的官方文档提供了一个基于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。

修改对应的名字,我们这里就叫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 需要引入JPAmysql的依赖包,同时加入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,后面我们需要把这个地址传进容器服务里。

对于k8s集群,一般来说我们可以使用kubectl来下发如下的yml文件来进行部署,yml文件中主要指定了镜像的地址,端口号以及我们需要配置的环境变量等。

    ---
    apiVersion: apps/v1beta1kind: Deploymentmetadata:name: userproviderspec:replicas: 1template:metadata:labels:app: userproviderspec:containers:- name: userprovider
            image: ccr.ccs.tencentyun.com/mydocker/userimage:0.0.1ports:- containerPort: 8090
            env:- name: userprovider_mysql
              value: 10.98.1.9---
    apiVersion: v1kind: Servicemetadata:name: userproviderspec:type: NodePortports:- nodePort: 30010
        port: 8090targetPort: 8090selector:app: userprovider

腾讯云容器服务为用户提供了更为方便的操作方法,只需在添加服务界面进行一定配置就能进行服务部署,等于是把ymal文件的配置做了可视化,减轻了用户的工作量。
注意一下环境变量的部分,我们这里指定了userprovider_mysql为我们内网数据库的地址10.98.1.9。

因为我们选取了发布服务到公网,系统会自动创建LB将公网端口8080映射到容器的服务端口8090, 查看LB详情可以看到自动生成的域名。

通过访问绑定的域名的8080端口,接口测试成功。


总结

从上面的测试步骤可以看到,腾讯云的容器服务从最大程度上做到了人性化,用户甚至可以在完全不用登陆群集节点的情况下快速进行容器服务部署。同时腾讯云容器服务本身就是基于k8s做服务编排并兼容kubernetes标准API,又使得其通用性和易用性更强。本例提供的生成镜像的方法还是以手动为主,在客户的实际环境中如果结合Jenkins等CI/CD的工具就能够进一步提高效率和自动化程度。另外本文未提及的日志管理、监控告警功能也能为用户提供更多的便利,使开发人员将时间更多的投入在业务逻辑本身,也使运维人员能更多的把时间投入在应用本身的异常上面。

从零开始搭建腾讯云上的SpringBoot容器化应用相关推荐

  1. 从零开始搭建腾讯云上的 SpringBoot 容器化应用

    欢迎大家前往云+社区,获取更多腾讯海量技术实践干货哦~ 作者:李想 由于最近容器技术的火热,各大云计算厂商都已经提供了独立的容器服务,腾讯云也不例外.腾讯云容器服务的官方文档提供了一个基于Node.j ...

  2. 从零开始搭建腾讯云服务器

    1.重置密码 2.通过远程工具连接服务器ip(公网ip),我用的是MobaXterm 4.在home目录下, 创建acptuser用户,并设置acptuser的用户密码: [root@VM-16-3- ...

  3. 上传excel腾讯云服务器,使用SpringBoot上传文件到腾讯云

    最近在做一个项目,涉及到腾讯云上传文件/图片到服务器,为了图方便并且提升访问速度,想着上传到腾讯云存储桶是一个不错的选择.腾讯云存储桶的创建可见我之前的文章. 当然存储桶里面不仅可以存图片,也可以存储 ...

  4. 一键搭建微信小程序开发环境 及demo运行(腾讯云上一键搭建node.js服务器环境,PHP,Java,.NET服务类似)

    一.首先准备下本地环境(本地就需要一个微信开发工具) 1.首先得有一个微信小程序账号,登陆微信小程序首页:mp.weixin.qq.com,点击右上角立即注册. 注册登陆后,首页填写一些小程序基本信息 ...

  5. 在腾讯云上创建您的SQL Cluster(3)

    2019独角兽企业重金招聘Python工程师标准>>> 版权声明:本文由李斯达原创文章,转载请注明出处:  文章原文链接:https://www.qcloud.com/communi ...

  6. 腾讯云上的个人网站建立

    第一次在网上有了自己的个人空间(有点小激动),写点废话留个纪念,然后顺便记录一下主要的流程 先在腾讯云上申请学生认证,然后领取服务器和域名的代金券,(这里说明一下,腾讯云服务器原价一个月65RMB,域 ...

  7. 云服务器架设网站教程_手把手教你搭建腾讯云服务器入门(图文教程)

    本文由博主 威威喵 原创 博客主页:https://blog.csdn.net/smile_running 背景 暑假期间,愁着无聊但也不能荒废学业吧,毕竟以后想靠技术混口饭吃!为了实施自己的计划,特 ...

  8. 手把手教你搭建腾讯云服务器

    手把手教你搭建腾讯云服务器(图文并茂) 威威貓 2019-03-28 08:10:28  58357  收藏 162 分类专栏: 杂七杂八 文章标签: 服务器搭建 腾讯云服务器 云服务器环境配置 新手 ...

  9. 搭建腾讯云服务器(详细+最新教程)

    搭建腾讯云服务器 准备好工具(购买腾讯云服务器,准备putty.FileZilla.jdk.tomcat) 进行远程连接 安装jdk和tomcat 修改端口 准备好工具(购买腾讯云服务器,准备putt ...

最新文章

  1. 性能测试的“2-5-10原则”
  2. OpenDataSource,sql开放式数据源
  3. 产品经理如何提升自己的配色能力
  4. 实战 MDT 2012(六)---基于MAC地址的部署
  5. 支付宝异步回调返回success_深入解决异步编程Promise对象的学习
  6. LeetCode 84. 柱状图中最大的矩形(单调递增栈)
  7. 风机桨叶故障诊断(一) 样本的获取
  8. 五款提高工作效率的在线工具【神器】
  9. 分析SQL Server备份
  10. linux系统的磁盘挂载情况
  11. iOS 越狱手机 ikeymonitor 插件检测
  12. file_operations结构体介绍
  13. docker部署开发环境
  14. 通达信指标没有了怎么找回
  15. 因世俗的偏见--明明相爱,却不能走在一起
  16. 微信语音短消息amr文件转WAV
  17. Ix Chariot测试路由器流程
  18. c4d用python能做出啥动画_C4D治愈系动画,到底如何实现?
  19. java和js中遍历数组和对象的总结
  20. 2021年电气试验新版试题及电气试验模拟试题

热门文章

  1. vue---发表评论页面编写
  2. Patran/Nastran的安装与关联
  3. 跨境电商首选腾讯云轻量应用服务器Lighthouse!
  4. this.$emit
  5. 魔兽世界编程宝典读书笔记(9)
  6. 手机版wps怎么竖版_wps怎么做竖版ppt wps如何制作ppt
  7. moviepy音视频剪辑:使用fl_time进行时间特效处理报错OSError: Error in file xxxx, Accessing time
  8. Java面试一百道题目(第一题)-什么是面向对象,谈谈你对面向对象的理解
  9. Mysql学习笔记4-外键约束的要求解析
  10. 用计算机弹追梦人,黑大 “追梦人” | 计算机前的精灵——叶健雄