开发环境
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