首先需要在服务器上安装MySQL并且配置好远程连接,安装及配置方式可参考:
Ubuntu 20.x 安装 MySQL8.x 并配置远程连接
我的MySQL表结构如下:
创建SpringBoot项目,并添加下列依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
配置application.properties文件:
# 应用名称
spring.application.name=demo
# 应用服务 WEB 访问端口
server.port=8080
# spring 静态资源扫描路径
spring.resources.static-locations=classpath:/static/
# 数据库设置
#spring.datasource.url = jdbc:mysql://服务器ip:端口号/数据库名?serverTimezone=UTC
spring.datasource.url=jdbc:mysql://192.168.19.134:3306/Test?serverTimezone=UTC
#spring.datasource.username = 数据库用户名
spring.datasource.username=Test
#spring.datasource.password = 数据库密码
spring.datasource.password=7nN6KnYJF4insYHk
编写JdbcController文件用于操作数据库:
JdbcController.java
package com.example.demo;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.List;
import java.util.Map;
/**
* @author oyc
* @Description: 用户控制类
*/
@Controller
public class JdbcController {
@Resource
private JdbcTemplate jdbcTemplate;
/**
* 返回所有的记录
*/
// 获取所有的信息
@RequestMapping("/user")
@ResponseBody
public List<Map<String,Object>> list() {
return jdbcTemplate.queryForList("select * from man");
}
/**
* 通过名称查询记录
* 使用方式http://localhost:8080/getUserByName?name=allen
* @param name 查询的名称
*/
// 查询
@RequestMapping(value = "/getUserByName", method = RequestMethod.GET)
@ResponseBody
public List<Map<String,Object>> getStuById(@RequestParam(value="name",required=true) String name){
String sql = "SELECT * FROM man where name = '" + name+"'";
return jdbcTemplate.queryForList(sql);
}
/**
* 添加一个man
* 使用方式http://localhost:8080/addMan?name=allen2&age=23&information=我是Allen2
* @param name 名称
* @param age 年龄
* @param information 信息
*/
@RequestMapping(value = "/addMan",method = RequestMethod.GET)
@ResponseBody
public String addMan(@RequestParam(value="name",required=false,defaultValue="hello") String name,
@RequestParam(value="age",required=false,defaultValue="24") int age,
@RequestParam(value="information",required=false,defaultValue="我是hello") String information){
String sql = "INSERT INTO man VALUES ('"+name+"', "+age+", '"+information+"')";
return "影响行数" + jdbcTemplate.update(sql);
}
}
运行测试:
访问成功:
将SpringBoot项目打包成jar包:
在 target 文件夹中多出一个 demo-0.0.1-SNAPSHOT.jar 就是打包好的jar包
编写Dockerfile文件:
创建一个名为Dockerfile的,且没有后缀名的文件,并加入下列代码
# 基础镜像使用java
FROM java:8
# VOLUME 指定了临时文件目录为/tmp。
# 其效果是在主机 /var/lib/docker 目录下创建了一个临时文件,并链接到容器的/tmp
VOLUME /tmp
# 将jar包添加到容器中并更名为demo.jar
ADD demo.jar demo.jar
# 运行jar包
RUN bash -c 'touch /demo.jar'
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/demo.jar"]
解释下这个配置文件:
VOLUME 指定了临时文件目录为/tmp。
其效果是在主机 /var/lib/docker 目录下创建了一个临时文件,并链接到容器的/tmp。
该步骤是可选的,如果涉及到文件系统的应用就很有必要了。
/tmp目录用来持久化到 Docker 数据文件夹,因为 Spring Boot 使用的内嵌 Tomcat 容器默认使用/tmp作为工作目录.
项目的 jar 文件作为 “demo.jar” 添加到容器
ENTRYPOINT 执行项目 demo.jar。为了缩短 Tomcat 启动时间,添加一个系统属性指向 “/dev/./urandom” 作为 Entropy Source
如果是第一次打包,它会自动下载java 8的镜像作为基础镜像,以后再制作镜像的时候就不会再下载了。
利用ftp将jar包和Dockerfile文件上传至服务器:
利用ssh连接服务器:
cd到存放jar包和Dockerfile文件的目录下,执行下列语句制作镜像(注意末尾的" ."不能漏):
docker build -t springbootdemo .
-t 参数是指定此镜像的tag名
查看镜像:
docker images
启动容器:
docker run -d -p 7733:8080 springbootdemo4docker
-d参数是让容器后台运行
-p 是做端口映射,此时将服务器中的7733端口映射到容器中的8080(项目中端口配置的是8080)端口
测试成功:
一些docker相关命令:
查看所有容器,docker ps -a
删除容器,docker rm <容器id>(注意:如果容器在运行中,则需要先停止容器:docker stop <容器id>)
删除镜像,docker rmi <镜像名>(注意:如果存在容器与镜像的情况,一定要先删除容器)