首先需要在服务器上安装MySQL并且配置好远程连接,安装及配置方式可参考:
Ubuntu 20.x 安装 MySQL8.x 并配置远程连接
我的MySQL表结构如下:

创建SpringBoot项目,并添加下列依赖:
1 2 3 4 5 6 7 8 9 10 11 12
| <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文件:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| spring.application.name=demo
server.port=8080
spring.resources.static-locations=classpath:/static/
spring.datasource.url=jdbc:mysql://192.168.19.134:3306/Test?serverTimezone=UTC
spring.datasource.username=Test
spring.datasource.password=7nN6KnYJF4insYHk
|
编写JdbcController文件用于操作数据库:

JdbcController.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
| 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;
@Controller public class JdbcController {
@Resource private JdbcTemplate jdbcTemplate;
@RequestMapping("/user") @ResponseBody public List<Map<String,Object>> list() { return jdbcTemplate.queryForList("select * from man"); }
@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); }
@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的,且没有后缀名的文件,并加入下列代码
1 2 3 4 5 6 7 8 9 10
| FROM java:8
VOLUME /tmp
ADD demo.jar demo.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文件的目录下,执行下列语句制作镜像(注意末尾的" ."不能漏):
1
| $ docker build -t springbootdemo .
|
-t 参数是指定此镜像的tag名

查看镜像:

启动容器:
-d参数是让容器后台运行
-p 是做端口映射,此时将服务器中的7733端口映射到容器中的8080(项目中端口配置的是8080)端口
1
| $ docker run -d -p 7733:8080 springbootdemo4docker
|

测试成功:

一些docker相关命令:
查看所有容器,docker ps -a
删除容器,docker rm <容器id>(注意:如果容器在运行中,则需要先停止容器:docker stop <容器id>)
删除镜像,docker rmi <镜像名>(注意:如果存在容器与镜像的情况,一定要先删除容器)