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.