通用dockerfile 利用已经编译好的.jar 来构建镜像。要构建的目录如下:
[root@iZuf61quxhnlk9m2tkx16cZ demo_jar]# docker build -t demo:1 .
运行镜像:
[root@iZuf61quxhnlk9m2tkx16cZ demo_jar]# docker run --rm --name demo -p 8154:8154 demo:1
服务已经启动了
dockerfile 文件如下:
FROM java:8-jre-alpineMAINTAINER xx "xx@163.com"EXPOSE 8154VOLUME /tmpCOPY . .ENTRYPOINT ["java","-jar","/demo.jar"]
查看容器内部:
这个操作就是把当前目录下的所有文件都添加到了容器中。并且只是放在了 / 目录下面。
优化2: dockerfile
FROM java:8-jre-alpineMAINTAINER xxx"xxx@163.com"EXPOSE 8154RUN mkdir -p /usr/local/demo_appVOLUME /tmpCOPY . /usr/local/demo_appENV JAVA_OPTS=""ENTRYPOINT java ${JAVA_OPTS} -jar /usr/local/demo_app/demo.jar
运行:
docker run \-p 8154:8154 \--name demo \--rm \-e JAVA_OPTS='-server -Xmx512m -Xms512m' \-d \demo:1
优化3: dockerfile
FROM java:8-jre-alpineMAINTAINER xx"xxxx@163.com"EXPOSE 8154RUN mkdir -p /usr/local/demo_app/configVOLUME /tmpCOPY . /usr/local/demo_appENV JAVA_OPTS=""WORKDIR /usr/local/demo_appENTRYPOINT java ${JAVA_OPTS} -jar /usr/local/demo_app/demo.jar
运行:
docker run \-p 8154:8154 \--name demo \-e JAVA_OPTS='-server -Xmx512m -Xms512m' \-v /usr/local/demo_app/logs:/usr/local/demo_app/logs \-v /usr/local/demo_app/tmp:/tmp \-v /usr/local/demo_app/config:/usr/local/demo_app/config \-d \demo:1
容器的工作目录为:
本机的目录为:
如果需要 application.yml 文件可以放在 /usr/local/demo_app/config 中如:
注意 如果demo.jar 包里也有这三个启动文件。那么spring boot 也有可能会读取到。就是读取完 file:config/applicaiton-test.yml 配置后,依然会去读取classspath:applicaiton-test.yml (Spring Boot v2.1.4.RELEASE, Spring v5.1.6.RELEASE)
但是 (Spring Boot v2.1.3.RELEASE, Spring v5.1.5.RELEASE) 中file:config/applicaiton-test.yml 的配置信息是读取不到的。最后还是要落地于实践
导出镜像:
[root@iZuf61quxhnlk9m2tkx16cZ ~]# docker save -o /usr/local/demo.tar demo:1
导入镜像:
[root@iZuf61quxhnlk9m2tkx16cZ ~]# docker load demo.tar