开发环境
Windows下IDEA开发
Linux下部署项目
知识技术点
SpringBoot
Docker
Docker Compose
Thymeleaf
BootStrap
SpringBoot案例
首先我们先准备一个 Spring Boot 使用 Mssql 的小场景,我们做这样一个示例,使用 Spring Boot 做一个 Web 应用,提供一个简单增删改查功能,每次请求时将统计数据存入 Mssql 并展示到页面中。
配置信息
依赖包
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>com.microsoft.sqlserver</groupId>
<artifactId>mssql-jdbc</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.webjars</groupId>
<artifactId>jquery</artifactId>
<version>2.1.1</version>
</dependency>
<dependency>
<groupId>org.webjars</groupId>
<artifactId>bootstrap</artifactId>
<version>3.2.0</version>
</dependency>
<dependency>
<groupId>org.webjars</groupId>
<artifactId>webjars-locator-core</artifactId>
</dependency>
</dependencies>
主要添加了 Spring Boot Web 支持,使用 Jpa 操作数据库、添加 Mssql 驱动包、webjars包等
配置文件
application.yml
spring:
profiles:
active: dev
jpa:
hibernate:
ddl-auto: update
show-sql: true
application-dev.yml
spring:
datasource:
url: jdbc:sqlserver://localhost:1433;databaseName=test_docker_mssql
username: sa
password: 111111
application-docker.yml
spring:
datasource:
url: jdbc:sqlserver://mssql:1433;databaseName=test_docker_mssql
username: sa
password: Guang@8620
--msqsql 是后面配置文件docker-compose.yml定义
配置了数据库的链接信息,以及 Jpa 更新表模式、方言和是否显示Sql
Docker配置
在SpringBoot项目根目录下创建Dockerfile文件
# 指定基础镜像(必需且为第一条指令,scratch是空白镜像) FROM 192.168.3.16:5000/openjdk:latest # MAINTAINER已经过期,具体参考:https://docs.docker.com/engine/reference/builder/#label LABEL author-name="army.qin" # 为了防止运行时用户忘记将动态文件所保存目录挂载为卷,在 Dockerfile 中,我们可以事先指定某些目录挂载为匿名卷, # 这样在运行时如果用户不指定挂载,其应用也可以正常运行,不会向容器存储层写入大量数据。 VOLUME /tmp # 在 COPY 和 ADD 指令中选择的时候,可以遵循这样的原则, # 所有文件复制使用 COPY 指令,仅在需要自动解压缩的场合使用 ADD 指令 ADD target/docker-mssql.jar app.jar
修改SpringBoot项目pom.xml打包文件
<properties>
<java.version>1.8</java.version>
<docker.repostory>192.168.3.16</docker.repostory>
</properties>
<build>
<!-- 最终Maven本地打包出来的jar包名称 -->
<finalName>${project.artifactId}</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<!-- GitHub: https://github.com/spotify/docker-maven-plugin -->
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>1.2.0</version>
<executions>
<execution>
<id>build-image</id>
<phase>package</phase>
<goals>
<goal>build</goal>
</goals>
</execution>
</executions>
<configuration>
<!--<serverId>server-registry</serverId>-->
<registryUrl>http://${docker.repostory}:5000</registryUrl>
<pushImage>true</pushImage>
<!-- 远程镜像名称 -->
<imageName>${docker.repostory}:5000/${project.artifactId}:${project.version}</imageName>
<forceTags>true</forceTags>
<imageTags>
<imageTag>${project.version}</imageTag>
<imageTag>latest</imageTag>
</imageTags>
<dockerHost>http://${docker.repostory}:22375</dockerHost>
<dockerDirectory>${project.basedir}</dockerDirectory>
<resources>
<resource>
<targetPath>/target</targetPath>
<directory>${project.build.directory}</directory>
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
</configuration>
</plugin>
</plugins>
</build>
docker-compose.yml
version: '3'
services:
mssql:
image: 192.168.3.16:5000/mssql:latest
hostname: mssql
container_name: v-mssql
volumes:
- ./data:/var/opt/mssql
environment:
- ACCEPT_EULA=Y
- SA_PASSWORD=Guang@8620
restart: always
ports:
- "1433:1433"
dockerMssql:
image: 192.168.3.16:5000/docker-mssql:latest
hostname: docker-mssql
container_name: v-docker-mssql
volumes:
- ./logs:/logs
restart: always
ports:
- "8821:8080"
links:
- mssql:mssql
depends_on:
- mssql
command: java -jar /app.jar --server.port=8080 --spring.profiles.active=docker
这里大慨说一下注意的属性:
services下的mssql定义在上面application-docker.yml文件连接容器内数据库时使用到
volumes在mssql定义的左边./data是相对当前docker-compose.yml文件下的data目录,属于主机的,右边/var/opt/mssql是运行mssql数据库后,在容器内的路径,这里做了一下挂载,方便在容器外好管理数据库数据
volumes在dockermssql定义的左边./logs也是相对当前docker-compose.yml文件下的logs目录,属于主机,右边/logs是运行SpringBoot项目后,在容器根目录存放log的目录,这里也是做了一下挂载,方便在容器外查看日志
Linux部署项目
上传docker-compose.yml文件到Linux服务器,并在当前文件目录下新建data目录和logs目录
后台启动项目
docker-compose up -d
停止项目
docker-compose stop
卸载项目
docker-compose down