自动初始化表结构和数据

  1. spring:
  2. datasource:
  3. type: com.alibaba.druid.pool.DruidDataSource
  4. driver-class-name: ${DATASOURCE_DRIVER_CLASS_NAME:com.mysql.cj.jdbc.Driver}
  5. url: ${DATASOURCE_URL:jdbc:mysql://localhost:3306/service-factory-backend?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&serverTimezone=Asia/Shanghai&autoReconnect=true}
  6. username: ${DATASOURCE_USERNAME:root}
  7. password: ${DATASOURCE_PASSWORD:root}
  8. schema: classpath:db/schema-mysql.sql # 每次启动程序,都会运行以对数据库操作
  9. data: classpath:db/data-mysql.sql # 每次启动程序,都会运行以对数据库的数据操作
  10. schema-username: ${DATASOURCE_USERNAME:root}
  11. schema-password: ${DATASOURCE_USERNAME:root}
  12. data-username: ${DATASOURCE_USERNAME:root}
  13. data-password: ${DATASOURCE_USERNAME:root}
  14. platform: mysql
  15. continue-on-error: true
  16. initialization-mode: always

使用环境变量控制环境参数

  1. # 数据源配置
  2. spring:
  3. datasource:
  4. type: com.alibaba.druid.pool.DruidDataSource
  5. driverClassName: ${DATASOURCE_DRIVER_CLASS_NAME:com.mysql.cj.jdbc.Driver}
  6. druid:
  7. # 主库数据源
  8. master:
  9. url: ${DATASOURCE_URL:jdbc:mysql://localhost:3306/light-ama?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true}
  10. username: ${DATASOURCE_USERNAME:root}
  11. password: ${DATASOURCE_PASSWORD:root}
  12. # redis 配置
  13. redis:
  14. # 地址
  15. host: ${REDIS_HOST:localhost}
  16. # 端口,默认为6379
  17. port: ${REDIS_PORT:6379}
  18. # 密码
  19. password:${REDIS_PASSWORD}

编写Dockerfile

  1. # 基础镜像使用java
  2. FROM frolvlad/alpine-oraclejdk8:slim
  3. # openjdk:8-jdk-alpine 代码去除了一些加密和图形的部分的非开源的组件。导致验证码显示会有问题。
  4. # 作者
  5. MAINTAINER zhukaiyuan <zhukaiyuan@hniii.com>
  6. # VOLUME 指定了临时文件目录为/tmp。
  7. # 其效果是在主机 /var/lib/docker 目录下创建了一个临时文件,并链接到容器的/tmp
  8. VOLUME /tmp
  9. ARG JAR_FILE=target/*.jar
  10. COPY ${JAR_FILE} app.jar
  11. ENTRYPOINT ["sh","-c","java ${JAVA_OPTS} -Djava.security.egd=file:/dev/./urandom -jar /app.jar"]

VOLUME 指定了临时文件目录为/tmp。其效果是在主机 /var/lib/docker 目录下创建了一个临时文件,并链接到容器的/tmp。该步骤是可选的,如果涉及到文件系统的应用就很有必要了。/tmp目录用来持久化到 Docker 数据文件夹,因为 Spring Boot 使用的内嵌 Tomcat 容器默认使用/tmp作为工作目录
项目的 jar 文件作为 “app.jar” 添加到容器的
ENTRYPOINT 执行项目 app.jar。为了缩短 Tomcat 启动时间,添加一个系统属性指向 “/dev/./urandom” 作为 Entropy Source
如果是第一次打包,它会自动下载java 8的镜像作为基础镜像,以后再制作镜像的时候就不会再下载了。

添加构建Docker镜像的Maven插件

  1. <build>
  2. <plugins>
  3. ...
  4. <plugin>
  5. <groupId>com.spotify</groupId>
  6. <artifactId>docker-maven-plugin</artifactId>
  7. <version>1.2.2</version>
  8. <configuration>
  9. <imageName>example</imageName>
  10. <dockerDirectory>docker</dockerDirectory>
  11. <resources>
  12. <resource>
  13. <targetPath>/</targetPath>
  14. <directory>${project.build.directory}</directory>
  15. <include>${project.build.finalName}.jar</include>
  16. </resource>
  17. </resources>
  18. </configuration>
  19. </plugin>
  20. ...
  21. </plugins>
  22. </build>

使用Maven命令构建并Push镜像

  1. mvn clean install

使用Docker命令启动Docker容器

  1. docker run -p "8080:8080" xcrj/backend:1.0.0

使用DockerCompose部署应用

  1. version: '3'
  2. services:
  3. mysqlDb:
  4. container_name: mysqlDb # 指定容器的名称
  5. image: mysql:5.7.21
  6. ports:
  7. - "3307:3306"
  8. command: [
  9. '--character-set-server=utf8mb4',
  10. '--collation-server=utf8mb4_unicode_ci',
  11. '--lower-case-table-names=1'
  12. ]
  13. environment:
  14. MYSQL_ROOT_PASSWORD: "root"
  15. MYSQL_ROOT_HOST: "%"
  16. MYSQL_DATABASE: backend
  17. redisDb:
  18. image: redis:5.0.0
  19. container_name: redisDb
  20. restart: alwaysdocke
  21. ports:
  22. - "16379:6379"
  23. volumes:
  24. - ./data:/data
  25. command: redis-server --requirepass 123456
  26. serviceFactory:
  27. container_name: serviceFactory #配置容器名
  28. build:
  29. context: .
  30. dockerfile: Dockerfile #指定dockerFile文件
  31. image: xcrj/backend:1.0.0
  32. ports:
  33. - "8080:8080"
  34. environment:
  35. DATASOURCE_DRIVER_CLASS_NAME: com.mysql.cj.jdbc.Driver
  36. DATASOURCE_URL: jdbc:mysql://mysqlDb:3306/backend?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&serverTimezone=Asia/Shanghai&autoReconnect=true
  37. DATASOURCE_USERNAME: root
  38. DATASOURCE_PASSWORD: root
  39. REDIS_HOST: redisDb
  40. REDIS_PORT: 6379
  41. JAVA_OPTS: -Dspring.redis.password=123456
  42. depends_on:
  43. - mysqlDb
  44. - redisDb