idea整合docker快速部署springboot应用的详细过程

yizhihongxing

下面是整合docker快速部署springboot应用的详细攻略。

准备工作

在开始之前,确保你已经安装好了以下软件或工具:

步骤一:创建Spring Boot应用

首先,我们需要创建一个Spring Boot应用程序。这里提供一个快速创建Spring Boot应用程序的方法:

  1. 打开 start.spring.io 网站,选择你想用的项目配置,例如 Maven/Gradle、Java版本、Spring Boot版本等等。

  2. 在 Dependencies 区域选择需要的依赖,这里我们至少需要选择 Spring WebSpring Data JPA ,这样我们就能够 create, read, update 和 delete (CRUD)数据,同时我们为了方便而选择集成 Swagger。

  3. 点击 Generate 按钮,会自动下载一个.zip 文件。解压它到你的电脑上,然后用你喜欢的 IDE 打开解压后的文件夹。

  4. 在 IDE 中运行项目,确认你的 Spring Boot 应用已经启动,并且能够访问 http://localhost:8080/swagger-ui.html 。

步骤二:修改 Dockerfile

  1. 在根目录下创建一个名为 Dockerfile 的文件。然后在文件中使用以下内容替换掉默认内容:
# 指定运行时的镜像,这里我们使用了官方的 openjdk 镜像
FROM openjdk:11-jre-slim

# 指定 Spring Boot 应用程序 jar 文件的路径
ARG JAR_FILE=target/*.jar

# 将 jar 文件添加到容器中
ADD ${JAR_FILE} app.jar

# 暴露 8080 端口让容器外部可以访问
EXPOSE 8080

# 指定容器启动时运行的命令
ENTRYPOINT ["java","-jar","/app.jar"]
  1. 可以根据需要添加更多的 Docker 构建指令,以安装所需的操作系统软件包,配置环境变量、复制配置文件等。

步骤三:构建Docker镜像

构建 Docker 镜像时,我们需要在应用程序 jar 文件所在的目录中运行以下命令:

docker build -t <镜像名称:tag> .

<镜像名称:tag>表示 Docker 镜像的名称和版本号,可以根据需要改变。

步骤四:运行Docker容器

运行 Docker 镜像后,我们需要在容器内运行应用程序并将容器的 8080 端口映射到主机上的其他端口。运行以下命令:

docker run -p <主机端口>:8080 <镜像名称>

<主机端口>表示主机上用于访问应用程序的端口号,可以根据需要改变。

示例一:实现mysql数据库的快速docker部署

接下来我们执行上述的步骤,并添加一个示例说明,假设我们要创建一个使用MySQL数据库的Spring Boot应用。我们需要在Docker容器中安装MySQL镜像,然后将Spring Boot应用连接到这个镜像。以下是实现步骤:

  1. 在 Docker compose 文件中添加以下配置:
version: "3"

services:
  db:
    image: mysql
    environment:
      - MYSQL_ROOT_PASSWORD=secret
      - MYSQL_DATABASE=testdb
      - MYSQL_USER=testuser
      - MYSQL_PASSWORD=testpass
    ports:
      - "3306:3306"
  app:
    build: .
    ports:
      - "8080:8080"
    depends_on:
      - db
    environment:
      - SPRING_DATASOURCE_URL=jdbc:mysql://db:3306/testdb?useSSL=false&allowPublicKeyRetrieval=true&useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8
      - SPRING_DATASOURCE_USERNAME=testuser
      - SPRING_DATASOURCE_PASSWORD=testpass

这个文件包含了两个服务:dbappdb服务安装了mysql镜像,并且告诉容器使用一个root用户密码为"secret"的数据库,然后将本地端口3306映射到容器中的3306端口。

  1. 创建一个名为 docker-compose.yml 的文件,并将上述内容放入其中。然后运行以下命令启动容器:
docker-compose up

执行结束后,你的Spring Boot应用就可以连接到MySQL容器中,并使用数据库名称为 testdb、用户名为 testuser、密码为 testpass 的数据库。

示例二:一个包含定时任务的Spring Boot应用的快速docker部署

以下是在 Docker 容器中部署使用 Spring Quartz 定时任务(scheduler)的 Spring Boot 应用程序的步骤:

  1. 将以下依赖项添加到 pom.xml 文件中:
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-quartz</artifactId>
</dependency>
  1. 在 Spring Boot 应用程序中创建一个 Quartz 定时任务:
@Component
public class QuartzJobScheduler {

    @Scheduled(fixedDelay = 1000)
    public void schedule() {
        System.out.println("Hello world!");
    }

}

定时任务是一个简单的示例,它仅在控制台中每秒打印一次“Hello world!”消息。实际上,你需要编写一个更复杂的定时任务类来满足你的特定需求。

  1. 修改 Dockerfile 内容:
# 指定运行时的镜像,这里我们使用了官方的 openjdk 镜像
FROM openjdk:11-jre-slim

# 指定 Spring Boot 应用程序 jar 文件的路径
ARG JAR_FILE=target/*.jar

# 添加 Quartz properties
COPY quartz.properties /quartz.properties

# 将 jar 文件添加到容器中
ADD ${JAR_FILE} app.jar

# 暴露 8080 端口让容器外部可以访问
EXPOSE 8080

# 指定容器启动时运行的命令
ENTRYPOINT ["java","-jar","/app.jar","--spring.config.location=/quartz.properties"]
  1. 创建一个名为 quartz.properties 的文件,添加以下内容:
spring.quartz.job-store-type=jdbc
spring.quartz.jdbc.initialize-schema=always
spring.quartz.properties.org.quartz.scheduler.instanceName=myScheduler
spring.quartz.properties.org.quartz.jobStore.driverDelegateClass=org.quartz.impl.jdbcjobstore.StdJDBCDelegate
spring.quartz.properties.org.quartz.jobStore.dataSource=myDataSource
spring.quartz.properties.org.quartz.dataSource.myDataSource.connectionProvider.class=org.quartz.impl.jdbcjobstore.C3p0ConnectionProvider
spring.quartz.properties.org.quartz.dataSource.myDataSource.driver=com.mysql.jdbc.Driver
spring.quartz.properties.org.quartz.dataSource.myDataSource.URL=jdbc:mysql://db:3306/testdb?useSSL=false&amp;allowPublicKeyRetrieval=true&amp;characterEncoding=UTF-8&amp;serverTimezone=GMT%2B8
spring.quartz.properties.org.quartz.dataSource.myDataSource.user=root
spring.quartz.properties.org.quartz.dataSource.myDataSource.password=secret
 ```

这个文件定义了 Quartz 调度程序所需的属性,例如驱动程序类名、数据源 URL、用户名称和密码等。

5. 运行以下命令构建 Docker 镜像:

```bash
docker build -t myquartzapp .
  1. 在 Docker Compose 文件中添加以下配置:
version: "3"

services:
  db:
    image: mysql
    environment:
      - MYSQL_ROOT_PASSWORD=secret
      - MYSQL_DATABASE=testdb
      - MYSQL_USER=testuser
      - MYSQL_PASSWORD=testpass
    ports:
      - "3306:3306"
  app:
    build: .
    ports:
      - "8080:8080"
    environment:
      - SPRING_DATASOURCE_URL=jdbc:mysql://db:3306/testdb?useSSL=false&allowPublicKeyRetrieval=true&useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8
      - SPRING_DATASOURCE_USERNAME=testuser
      - SPRING_DATASOURCE_PASSWORD=testpass
      - SPRING_QUARTZ_JOB-STORE-TYPE=jdbc
      - SPRING_QUARTZ_JDBC_INITIALIZE-SCHEMA=always
    depends_on:
      - db
  1. 运行以下命令,启动 Docker 容器:
docker-compose up

执行结束后,你的 Spring Boot 应用程序将定时打印“Hello world!”消息。完整的 Docker 配置文件和常规应用程序推荐放在同一个 Git 仓库中。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:idea整合docker快速部署springboot应用的详细过程 - Python技术站

(0)
上一篇 2023年5月15日
下一篇 2023年5月15日

相关文章

  • [笔记]使用Docker部署.NET Core应用程序

      大概快有一年的时间没有碰过docker了,理由很简单,基本上都是在IIS上部署,看到很多大佬都开始Devops持续化集成了,还有就是用Linux守护进程很恶心,哈哈,但相对来说成本会更高,但对于大型团队来说还是不错的,这不?不想被大伙甩下,哈哈,赶紧捞回来点丢下的知识,这篇文章就算是对我自己的笔记吧…Docker 中 有EE 和 CE 两个版本,其中…

    Docker 2023年4月13日
    00
  • CentOS6.5安装docker

    1.rpm -iUvh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm2.yum install https://get.docker.com/rpm/1.7.1/centos-6/RPMS/x86_64/docker-engine-1.7.1-1.el6.x…

    Docker 2023年4月12日
    00
  • Docker中 Ubuntu 容器 apt-get update网络访问失败解决办法

    学习Docker在Ubuntu容器中使用apt-get update命令遇到如下网络连接错误: $ docker run -it ubuntu root@3c5e3b049c88:/# apt-get update Err:1 http://archive.ubuntu.com/ubuntu bionic InRelease Temporary failur…

    Docker 2023年4月13日
    00
  • docker在Linux(有网、无网)下面的安装教程

      关于docker的概念,我在这里就不作说明了,直接切入正题吧!   有些客户对保密性要求比较高,因此去现场部署项目的时候,是没有网络的,这样的话,就比较难受了,网上许多无网的安装教程中需要yum指令,前提得有网络才能使用yum呀。下面将会分别介绍下有网和无网情况下docker的安装。 有网 docker ce支持64位版本 Centos 7,并且要求内核…

    Docker 2023年4月13日
    00
  • Docker: docker image常用命令实战

    #docker列出镜像[root@192 ~]# docker imagesREPOSITORY TAG IMAGE ID CREATED SIZEnginx latest 881bd08c0b08 6 days ago 109MB#docker:查看镜像名为nginx的镜像历史[root@192 ~]# docker history nginxIMAGE …

    Docker 2023年4月11日
    00
  • CentOS下Docker容器连接

    环境:系统centos7、docker、ubuntu镜像 说明:docker容器与容器之间是被隔离的默认情况下不能直接通信,如果需要通信必须加入到同一个网络    创建一个网络test-net容器 docker network create -d bridge test-net 注:如果本地没有bridge镜像,docker默认会自动去registry去拉取…

    Docker 2023年4月11日
    00
  • 对于Docker使用的一些安全配置建议

    非常好,下面是有关Docker使用的一些安全配置建议的完整攻略,包含以下两个示例说明: 1. 检查Docker服务配置 首先,我们应该检查我们的Docker服务配置。检查Docker服务是否提供了默认的连接端口。默认情况下,Docker服务使用TCP 2375端口和UDP 2376端口。这两个端口都是开放的,默认情况下不需要认证,因此可能存在被攻击的风险。 …

    Docker 2023年5月16日
    00
  • Docker不做虚拟化内核,对.NET有什么影响?

    引子 前两天刷抖音,看见了这样一个问题。问题:容器化不做虚拟内核,会有什么弊端?Java很多方法会跟CPU的核数有关,这个时候调用系统函数,读到的是宿主机信息,而不是我们限制资源的大小。思考:在我们.NET中是否也会出现这种问题呢? 环境准备 1. 准备程序 在我们.NET中,并行编程(Parallel)或者线程池(ThreedPool)中,默认会根据CPU…

    2023年4月10日
    00
合作推广
合作推广
分享本页
返回顶部