docker 部署springboot项目,连接mysql容器

本文涉及的产品
RDS MySQL DuckDB 分析主实例,基础系列 4核8GB
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
RDS AI 助手,专业版
简介: docker 部署springboot项目,连接mysql容器

入手docker部署springboot项目,记录一下学习过程,过程很简单,主要是部署过程中的收获,下面跟我一起来吧

  1. 创建一个springboot项目,pom引入maven-docker-plugin依赖
<plugin>
                <groupId>com.spotify</groupId>
                <artifactId>docker-maven-plugin</artifactId>
                <version>0.4.13</version>
                <configuration>
<!--                    镜像名称-->
                    <imageName>${docker.image.prefix}-docker-demo:0.0.1</imageName>
<!--                    dockerfile地址 -->
                    <dockerDirectory>${project.basedir}/src/main/docker</dockerDirectory>
                    <resources>
                        <resource>
                            <targetPath>/</targetPath>
                            <directory>${project.build.directory}</directory>
                            <include>${project.build.finalName}.jar</include>
                        </resource>
                    </resources>
                </configuration>
            </plugin>

完成pom如下

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.7.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.tz</groupId>
    <artifactId>docker</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>docker</name>
    <description>Demo project for Spring Boot</description>
    <properties>
        <java.version>1.8</java.version>
<!--        镜像前缀-->
        <docker.image.prefix>tz</docker.image.prefix>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <!-- 数据库驱动 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
        <!-- springdata jpa -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.8</version>
            <scope>provided</scope>
        </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>
                <version>0.4.13</version>
                <configuration>
<!--                    镜像名称-->
                    <imageName>${docker.image.prefix}-docker-demo:0.0.1</imageName>
<!--                    dockerfile地址 -->
                    <dockerDirectory>${project.basedir}/src/main/docker</dockerDirectory>
                    <resources>
                        <resource>
                            <targetPath>/</targetPath>
                            <directory>${project.build.directory}</directory>
                            <include>${project.build.finalName}.jar</include>
                        </resource>
                    </resources>
                </configuration>
            </plugin>
        </plugins>
        <finalName>tz-docker-demo</finalName>
    </build>
</project>
  1. 编写Dockerfile 文件,文件位置src/main/docker/Dockerfile,文件内容如下
FROM frolvlad/alpine-oraclejdk8:slim
VOLUME /tmp
# 下面jar包的名称为springboot项目打包完成的jar包名称
ADD tz-docker-demo.jar app.jar
EXPOSE 8761
ENTRYPOINT ["java","-jar","/app.jar"]
  1. 集成jpa,方便测试mysql连通性,pom依赖第一步已经给出,下面是yml文件内容
# server
server:
  port: 8081
  servlet:
    context-path: /boot
# database
spring:
  datasource:
    url: jdbc:mysql://tz_mysql:3306/mystudy
    driver-class-name:  com.mysql.cj.jdbc.Driver
    username: root
    password: root
  # jpa
  jpa:
    hibernate:
      ddl-auto: update  # 建表策略
    show-sql: true  #显示SQL语句

yml文件解析

jdbc:mysql://tz_mysql:3306/mystudy
 
tz_mysql: 我自己的本地mysql的docker镜像名称,此处注意,一会使用命令启动时连接容器别名要和此处一致
mystudy: 本地mysql数据库
  1. 编写controller
package com.tz.docker;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.Date;
import java.util.List;
/**
 * @author tz
 * @Classname UserController
 * @Description
 * @Date 2019-08-15 21:08
 */
@RestController
public class UserController {
    @Autowired
    private UserInfoRepository userInfoRepository;
    @RequestMapping("/getUserInfo")
    public Object getUserInfo() {
        /*
            这里有一个大坑:使用getOne()的方法,可以查到数据。但是无法默认转化成JSON数据,返回接口直接报错
        */
        //UserInfo userInfo = userInfoRepository.getOne(1);
        for(int i = 0;i<10;i++){
            UserBean userBean = new UserBean();
            userBean.setAge(12);
            userBean.setBirthday(new Date());
            userBean.setCreatedTime(new Date());
            userBean.setJob("3333:"+i);
            userBean.setSex("1");
            userInfoRepository.save(userBean);
        }
        List<UserBean> all = userInfoRepository.findAll();
        return all;
    }
}
  1. 编写dao
package com.tz.docker;
import org.aspectj.weaver.ast.Var;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
/**
 * @author tz
 * @Classname UserInfoRepository
 * @Description
 * @Date 2019-08-15 21:06
 */
@Repository
public interface UserInfoRepository extends JpaRepository<UserBean, Integer> {
}
  1. 编写bean
package com.tz.docker;
import lombok.Data;
import javax.persistence.*;
import java.util.Date;
/**
 * @author tz
 * @Classname UserBean
 * @Description
 * @Date 2019-08-15 21:02
 */
@Data
@Entity   //注意包名
@Table(name="user_info")
public class UserBean {
    @Id
    @GeneratedValue(strategy= GenerationType.AUTO)
    private Integer id;
    private String name;
    private Integer age;
    private String sex;
    private String job;
    private Date birthday;
    private Date createdTime;
    private Date updateTime;
}
  1. 开始镜像容器部署,首先打包应用,如果不打包直接构建镜像会保找不到jar包的错误
    打包idea中使用maven工具栏

    然后第二步build镜像

    用命令就是
mvn clean package docker:build
  1. 构建成功之后使用docker images查看构建成功的镜像

  2. 确认mysql容器运行

  3. 运行我们构建成功的容器
docker run --rm -p 8081:8081 --name demo  --link tz_mysql:tz_mysql tz-docker-demo:0.0.1

命令解析

--rm 运行完删除容器
-p 端口映射
--name 本镜像名称
--link tz_mysql 第一个参数为mysql的docker镜像名称,tz_mysql 第二个参数为别名,此处和yml文件中连接mysql的地址保持一致 
tz-docker-demo:0.0.1 这个为我们刚刚build的镜像名称
  1. 好了,docker部署springboot项目就是这么简单,下面看一下成功
    浏览器输入 http://localhost:8081/boot/getUserInfo
    显示

下面附上项目源码

docker-demo

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
目录
相关文章
|
8月前
|
关系型数据库 应用服务中间件 nginx
Docker一键安装中间件(RocketMq、Nginx、MySql、Minio、Jenkins、Redis)
本系列脚本提供RocketMQ、Nginx、MySQL、MinIO、Jenkins和Redis的Docker一键安装与配置方案,适用于快速部署微服务基础环境。
|
5月前
|
NoSQL Java 网络安全
SpringBoot启动时连接Redis报错:ERR This instance has cluster support disabled - 如何解决?
通过以上步骤一般可以解决由于配置不匹配造成的连接错误。在调试问题时,一定要确保服务端和客户端的Redis配置保持同步一致。这能够确保SpringBoot应用顺利连接到正确配置的Redis服务,无论是单机模式还是集群模式。
498 5
|
5月前
|
NoSQL 算法 Redis
【Docker】(3)学习Docker中 镜像与容器数据卷、映射关系!手把手带你安装 MySql主从同步 和 Redis三主三从集群!并且进行主从切换与扩容操作,还有分析 哈希分区 等知识点!
Union文件系统(UnionFS)是一种**分层、轻量级并且高性能的文件系统**,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtual filesystem) Union 文件系统是 Docker 镜像的基础。 镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。
690 6
|
5月前
|
XML Java 应用服务中间件
【SpringBoot(一)】Spring的认知、容器功能讲解与自动装配原理的入门,带你熟悉Springboot中基本的注解使用
SpringBoot专栏开篇第一章,讲述认识SpringBoot、Bean容器功能的讲解、自动装配原理的入门,还有其他常用的Springboot注解!如果想要了解SpringBoot,那么就进来看看吧!
617 2
|
5月前
|
存储 关系型数据库 MySQL
MySQL Docker 容器化部署全指南
MySQL是一款开源关系型数据库,广泛用于Web及企业应用。Docker容器化部署可解决环境不一致、依赖冲突问题,实现高效、隔离、轻量的MySQL服务运行,支持数据持久化与快速迁移,适用于开发、测试及生产环境。
833 4
|
7月前
|
关系型数据库 MySQL 数据库
为什么 MySQL 不推荐用 Docker 部署?
本文探讨了MySQL是否适合容器化的问题,分析了Docker容器在数据安全、性能瓶颈、状态管理及资源隔离等方面的挑战,并指出目前主流分布式数据库如TDSQL和OceanBase仍倾向于部署在物理机或KVM上。
358 0
|
8月前
|
Java 测试技术 Spring
简单学Spring Boot | 博客项目的测试
本内容介绍了基于Spring Boot的博客项目测试实践,重点在于通过测试驱动开发(TDD)优化服务层代码,提升代码质量和功能可靠性。案例详细展示了如何为PostService类编写测试用例、运行测试并根据反馈优化功能代码,包括两次优化过程。通过TDD流程,确保每项功能经过严格验证,增强代码可维护性与系统稳定性。
327 0
|
8月前
|
存储 Java 数据库连接
简单学Spring Boot | 博客项目的三层架构重构
本案例通过采用三层架构(数据访问层、业务逻辑层、表现层)重构项目,解决了集中式开发导致的代码臃肿问题。各层职责清晰,结合依赖注入实现解耦,提升了系统的可维护性、可测试性和可扩展性,为后续接入真实数据库奠定基础。
647 0
|
7月前
|
Kubernetes Docker Python
Docker 与 Kubernetes 容器化部署核心技术及企业级应用实践全方案解析
本文详解Docker与Kubernetes容器化技术,涵盖概念原理、环境搭建、镜像构建、应用部署及监控扩展,助你掌握企业级容器化方案,提升应用开发与运维效率。
1069 108