下面是整合docker快速部署springboot应用的详细攻略。
准备工作
在开始之前,确保你已经安装好了以下软件或工具:
步骤一:创建Spring Boot应用
首先,我们需要创建一个Spring Boot应用程序。这里提供一个快速创建Spring Boot应用程序的方法:
-
打开 start.spring.io 网站,选择你想用的项目配置,例如 Maven/Gradle、Java版本、Spring Boot版本等等。
-
在 Dependencies 区域选择需要的依赖,这里我们至少需要选择
Spring Web
和Spring Data JPA
,这样我们就能够 create, read, update 和 delete (CRUD)数据,同时我们为了方便而选择集成 Swagger。 -
点击 Generate 按钮,会自动下载一个.zip 文件。解压它到你的电脑上,然后用你喜欢的 IDE 打开解压后的文件夹。
-
在 IDE 中运行项目,确认你的 Spring Boot 应用已经启动,并且能够访问 http://localhost:8080/swagger-ui.html 。
步骤二:修改 Dockerfile
- 在根目录下创建一个名为 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"]
- 可以根据需要添加更多的 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应用连接到这个镜像。以下是实现步骤:
- 在 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
这个文件包含了两个服务:db
和 app
。db
服务安装了mysql镜像,并且告诉容器使用一个root用户密码为"secret"的数据库,然后将本地端口3306映射到容器中的3306端口。
- 创建一个名为 docker-compose.yml 的文件,并将上述内容放入其中。然后运行以下命令启动容器:
docker-compose up
执行结束后,你的Spring Boot应用就可以连接到MySQL容器中,并使用数据库名称为 testdb
、用户名为 testuser
、密码为 testpass
的数据库。
示例二:一个包含定时任务的Spring Boot应用的快速docker部署
以下是在 Docker 容器中部署使用 Spring Quartz 定时任务(scheduler)的 Spring Boot 应用程序的步骤:
- 将以下依赖项添加到 pom.xml 文件中:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-quartz</artifactId>
</dependency>
- 在 Spring Boot 应用程序中创建一个 Quartz 定时任务:
@Component
public class QuartzJobScheduler {
@Scheduled(fixedDelay = 1000)
public void schedule() {
System.out.println("Hello world!");
}
}
定时任务是一个简单的示例,它仅在控制台中每秒打印一次“Hello world!”消息。实际上,你需要编写一个更复杂的定时任务类来满足你的特定需求。
- 修改 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"]
- 创建一个名为
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&allowPublicKeyRetrieval=true&characterEncoding=UTF-8&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 .
- 在 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
- 运行以下命令,启动 Docker 容器:
docker-compose up
执行结束后,你的 Spring Boot 应用程序将定时打印“Hello world!”消息。完整的 Docker 配置文件和常规应用程序推荐放在同一个 Git 仓库中。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:idea整合docker快速部署springboot应用的详细过程 - Python技术站