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

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介: 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

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
打赏
0
0
0
0
186
分享
相关文章
容器化AI模型的持续集成与持续交付(CI/CD):自动化模型更新与部署
在前几篇文章中,我们探讨了容器化AI模型的部署、监控、弹性伸缩及安全防护。为加速模型迭代以适应新数据和业务需求,需实现容器化AI模型的持续集成与持续交付(CI/CD)。CI/CD通过自动化构建、测试和部署流程,提高模型更新速度和质量,降低部署风险,增强团队协作。使用Jenkins和Kubernetes可构建高效CI/CD流水线,自动化模型开发和部署,确保环境一致性并提升整体效率。
领取永久免费的ClawCloud云服务容器部署Alist网盘
领取永久免费的ClawCloud云服务容器部署Alist网盘,这是一款类似于 Vercel 和 Netlify 的在线开发平台,专为开发者和个人用户设计。如 Alist、Dify、frp 等,无需复杂的配置或高昂的成本。目前,平台提供永久免费的 5 刀/月额度,只需绑定一个注册超过 180 天的 GitHub 账号即可享受。
721 9
Spring Boot整合MySQL主从集群同步延迟解决方案
本文针对电商系统在Spring Boot+MyBatis架构下的典型问题(如大促时订单状态延迟、库存超卖误判及用户信息更新延迟)提出解决方案。核心内容包括动态数据源路由(强制读主库)、大事务拆分优化以及延迟感知补偿机制,配合MySQL参数调优和监控集成,有效将主从延迟控制在1秒内。实际测试表明,在10万QPS场景下,订单查询延迟显著降低,超卖误判率下降98%。
容器化爬虫部署:基于K8s的任务调度与自动扩缩容设计
随着业务复杂度提升,传统定时任务和手工扩缩容难以满足高并发与实时性需求。本文对比两种基于 Kubernetes 的爬虫调度与扩缩容方案:CronJob+HPA 和 KEDA。从调度灵活性、扩缩容粒度、实现难度等维度分析,并提供 YAML+Python 示例。方案 A(CronJob+HPA)适合固定定时任务,配置简单;方案 B(KEDA)支持事件驱动,适合高并发与异步触发场景。根据实际需求可混合使用,优化资源利用与效率。
容器技术实践:在Ubuntu上使用Docker安装MySQL的步骤。
通过以上的操作,你已经步入了Docker和MySQL的世界,享受了容器技术给你带来的便利。这个旅程中你可能会遇到各种挑战,但是只要你沿着我们划定的路线行进,你就一定可以达到目的地。这就是Ubuntu、Docker和MySQL的灵魂所在,它们为你开辟了一条通往新探索的道路,带你亲身感受到了技术的力量。欢迎在Ubuntu的广阔大海中探索,用Docker技术引领你的航行,随时准备感受新技术带来的震撼和乐趣。
99 16
使用容器服务ACK快速部署QwQ-32B模型并实现推理智能路由
阿里云最新发布的QwQ-32B模型,通过强化学习大幅度提升了模型推理能力。QwQ-32B模型拥有320亿参数,其性能可以与DeepSeek-R1 671B媲美。
【YashanDB知识库】原生mysql驱动配置连接崖山数据库
【YashanDB知识库】原生mysql驱动配置连接崖山数据库
【YashanDB知识库】原生mysql驱动配置连接崖山数据库
docker拉取MySQL后数据库连接失败解决方案
通过以上方法,可以解决Docker中拉取MySQL镜像后数据库连接失败的常见问题。关键步骤包括确保容器正确启动、配置正确的环境变量、合理设置网络和权限,以及检查主机防火墙设置等。通过逐步排查,可以快速定位并解决连接问题,确保MySQL服务的正常使用。
366 82
大数据新视界--大数据大厂之MySQL数据库课程设计:MySQL集群架构负载均衡故障排除与解决方案
本文深入探讨 MySQL 集群架构负载均衡的常见故障及排除方法。涵盖请求分配不均、节点无法响应、负载均衡器故障等现象,介绍多种负载均衡算法及故障排除步骤,包括检查负载均衡器状态、调整算法、诊断修复节点故障等。还阐述了预防措施与确保系统稳定性的方法,如定期监控维护、备份恢复策略、团队协作与知识管理等。为确保 MySQL 数据库系统高可用性提供全面指导。