[实习记录]springboot的docker封装相关

1 首先build得到jar包.
可以先在docker外测试jar包是否可以成功执行,java8以后的版本可能会报错,正确方法:
java -jar --add-modules java.xml.bind my-app.jar

2 写dockerfile文件.
选择基础镜像:
在此选择FROM openjdk:8-jre-alpine,因为体积小.
统一时区:

ENV TZ=Asia/Shanghai
RUN apk add --update --no-cache tzdata && cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo "Asia/Shanghai" > /etc/timezone

将COPY命令将jar包封进docker:
CMD执行:CMD ["java", "-jar", "....jar"]
3 在dockerfile当前文件路径下
docker build -t dockername .(不要忘记".")
4 可以直接docker run或者在有其他如mysql或是redis等依赖docker的情况下写docker-compose.yml:
在docker-compose文件里写清挂载volums.挂载里可以放置其他自定义的配置文件.
container_name指定各个容器的名称,以便直接通过名字引用ip.
5 写docker-compose.env文件:
env文件按照一定格式会自动覆盖springboot的application.yml配置文件,具体格式如env中的SPRING_DATASOURCE_USERNAME=root对应application.yml中的

spring:
  datasource:
    username: root

这里写mysql的url的时候就可以直接使用yml文件中定义的容器名作ip
如:
SPRING_DATASOURCE_URL=jdbc:mysql://mariadb:3306/yourdbname
6 注意docker内的文件映射地址:
7 springboot的logging配置:
真正执行时希望屏蔽spring自身的info信息,如显示大片beanprocessor is not eligible问题

spring:
  profiles: prod
logging:
  level:
    root: WARN
    yourpackage: INFO

然后可以在spirng中这样调用:

spring:
  profiles:
    active: prod

在命令行中执行jar包:
java -jar -Dspring.profiles.active=prod snapshot-1.0.0.jar
同样可以在dockerfile中执行jar包.

示例:
dockerfile:

FROM openjdk:8-jre-alpine
LABEL kk 
ENV TZ=Asia/Shanghai
RUN apk add --update --no-cache tzdata && cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo "Asia/Shanghai" > /etc/timezone
WORKDIR /app
COPY build/libs/snapshot-1.0.0.jar /app/
CMD ["java", "-jar", "-Dspring.profiles.active=prod", "/app/snapshot-1.0.0.jar"]

docker-compose.yml

version: "3"
services:  
  mysqld:
    image: mariadb:10.3.6
    env_file: docker-compose.env
    volumes:
      - /home/data:/var/lib/mysql
    restart: always
    logging:
      driver: json-file
      options:
        max-size: "10"  
    container_name: mariadb
  redis:
    image: redis
    env_file: docker-compose.env
    restart: always
    logging:
      driver: json-file
      options:
        max-size: "10"
    container_name: redis

docker-compose.env

SPRING_DATASOURCE_URL=jdbc:mysql://mariadb:3306/yourdbname
SPRING_DATASOURCE_USERNAME=root
SPRING_DATASOURCE_PASSWORD=password
SPRING_REDIS_HOST=redis
SPRING_REDIS_PORT=6379
TZ=Asia/Shanghai

8 docker push
注意push到自家公司的hub时要加上tag,否则会默认到hub.infervision.com.

你可能感兴趣的:([实习记录]springboot的docker封装相关)