1. springboot技术;2. mysql数据库;3. springboot项目docker容器化部署;4. mysql数据库容器化部署。
  数据准备:

tbuser。具体表结构如下:     

CREATE TABLE `tbuser` (
        `userid` int(11) NOT NULL AUTO_INCREMENT,
        `username` varchar(20) COLLATE utf8_bin DEFAULT NULL,
        `password` varchar(20) COLLATE utf8_bin DEFAULT NULL,
        `userroles` varchar(2) COLLATE utf8_bin DEFAULT NULL,
        `nickname` varchar(50) COLLATE utf8_bin DEFAULT NULL,
        PRIMARY KEY (`userid`)
      ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 COLLATE=utf8_bin

    添加数据测试,如下(但不限于如下):

INSERT INTO tbuser (username,password,userroles,nickname) VALUES('admin','xxxx','04','管理员'),('zoe','xxx','02','小破孩')

      

docker打包部署微服务 docker部署微服务实战_docker

  测试数据库链接:

    配置文件:

pom.xml

        

docker打包部署微服务 docker部署微服务实战_mysql_02

application.yml

        

docker打包部署微服务 docker部署微服务实战_mysql_03

测试:
      父类:

        

docker打包部署微服务 docker部署微服务实战_docker_04

      测试类:

        

docker打包部署微服务 docker部署微服务实战_docker打包部署微服务_05

       测试结果:

        

docker打包部署微服务 docker部署微服务实战_mysql_06

   项目编码

mybatisplus,其为是一个 MyBatis (opens new window)的增强工具。具体使用可参考官网MyBatis-Plus (baomidou.com)。

    配置文件pom.xml增加:

      

docker打包部署微服务 docker部署微服务实战_mysql_07

    编码:

      实体类:

        

docker打包部署微服务 docker部署微服务实战_docker_08

       mapper接口:

        

docker打包部署微服务 docker部署微服务实战_docker打包部署微服务_09

      通过注解@MapperScan进行定位:

        

docker打包部署微服务 docker部署微服务实战_mysql_10

      UserService:

        

docker打包部署微服务 docker部署微服务实战_docker打包部署微服务_11

        

docker打包部署微服务 docker部署微服务实战_docker打包部署微服务_12

        UserMapper 中的 selectList() 方法的参数为 MP 内置的条件封装器 Wrapper,所以不填写就是无任何条件。

       测试:

        

docker打包部署微服务 docker部署微服务实战_docker打包部署微服务_13

        

docker打包部署微服务 docker部署微服务实战_mysql_14

       控制器:

        

docker打包部署微服务 docker部署微服务实战_jar_15

      服务端口设置为8082:

        

docker打包部署微服务 docker部署微服务实战_docker_16

docker打包部署微服务 docker部署微服务实战_jar_17

   Docker部署:

    部署前准备:

脱离开发环境部署、测试项目

        

docker打包部署微服务 docker部署微服务实战_docker打包部署微服务_18

        

docker打包部署微服务 docker部署微服务实战_mysql_19

      2、部署mysql容器

        

docker打包部署微服务 docker部署微服务实战_jar_20

         导入sql数据

        

docker打包部署微服务 docker部署微服务实战_mysql_21

        

docker打包部署微服务 docker部署微服务实战_jar_22

       3、修改数据源为容器mysql进行测试:java -jar *.jar --spring.datasource.url=jdbc:mysql://xxx:3306/dockerDB?characterEncoding=utf-8&useSSL=false&useTimezone=true&serverTimeZone=GMT%2B8

        

docker打包部署微服务 docker部署微服务实战_jar_23

      

docker打包部署微服务 docker部署微服务实战_mysql_24

说明应用服务使用mysql容器作为数据持久化完全没有问题,下面通过Docker优化mysql镜像的方式进行部署:

  制作mysql自定义镜像并启动容器:

    1、编写Dockerfile文件

       

FROM mysql:8.0
        #Author
        MAINTAINER mysql from date UTC by Asia/Hubei "Shirley@163.com"
        ENV TZ Asia/Shanghai
        COPY inituser.sql /docker-entrypoint-initdb.d

        

docker打包部署微服务 docker部署微服务实战_docker_25

    2、构建镜像

        docker build --rm -t mysql:lifish01 .

        

docker打包部署微服务 docker部署微服务实战_docker打包部署微服务_26

    3、上传之私服

        

docker打包部署微服务 docker部署微服务实战_jar_27

         

docker打包部署微服务 docker部署微服务实战_mysql_28

     启动mysql容器,可以看到sql中相关操作在启动时全部完成,如下:

      docker run -itd --name docker_mysql -v /home/docker/data/mysql:/var/lib/mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=XXXX 192.168.X.1XX:5000/mysql:lifish01

        

docker打包部署微服务 docker部署微服务实战_docker_29

         

docker打包部署微服务 docker部署微服务实战_jar_30

   打包项目部署:

清理docker主机的容器:

      

docker打包部署微服务 docker部署微服务实战_mysql_31

    2、编写Dockerfile制作Springboot项目镜像

        

docker打包部署微服务 docker部署微服务实战_docker_32

docker build --rm -t 192.168.X.1XX:5000/deploy4docker:lifish01 --build-arg JAR_FILE=docker4deploy-0.0.1-SNAPSHOT.jar .

        

docker打包部署微服务 docker部署微服务实战_jar_33

安装docker-compose:编写docker-compose.yml文件,运行项目

        

docker打包部署微服务 docker部署微服务实战_jar_34

    4、编写docker-compose.yml,如下:

        

docker打包部署微服务 docker部署微服务实战_jar_35

     5、启动docker-compose up -d,并测试curl localhost:8082/users

        

docker打包部署微服务 docker部署微服务实战_mysql_36

         

docker打包部署微服务 docker部署微服务实战_jar_37

       可以看到测试结果返回500,看看日志吧,如下:

        

docker打包部署微服务 docker部署微服务实战_jar_38

       从日志看是数据库链接失败,也就是说app.jar并没有成功链接到容器dockerdemo-db-1 。下面查看原因并解决吧,如下:

      通过docker logs dockerdemo-dockerdemo-1查看,一步步解决问题:

      1)无法链接到无数据,这是因为app.jar中默认的配置不再适用于当前MySQL容器,需要通过环境变量设置新的链接url:

        SPRING_DATASOURCE_URL: jdbc:mysql://db:3306/dockerDB?useSSL=false&characterEncoding=utf-8&useTimezone=true&server TimeZone=GMT%2B8

      2)com.mysql.cj.exceptions.UnableToConnectException: Public Key Retrieval is not allowed,链接url中添加加密相关的设置allowPublicKeyRetrieval=true,如下:

        

docker打包部署微服务 docker部署微服务实战_jar_39

      注意这个变量就是之前测试执行java -jar *.jar 后面跟的变量,与编码中application.yml中url一致。

    以上环境变量设置完成后重新启动,并测试:

      

docker打包部署微服务 docker部署微服务实战_docker打包部署微服务_40