工作总结之DockerFile篇
理解项目中的DockerFile的编写
前言
详解项目中DockerFile命令的具体含义
含义解析
脚本如下:
FROM frolvlad/alpine-java:jdk8-slim
MAINTAINER didi
EXPOSE 8070
VOLUME ["/administrate"]
COPY ./target/administrate.jar administrate.jar
ENV TZ=Asia/Shanghai
RUN sh -c 'touch /administrate.jar' && ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
ENTRYPOINT ["java","-jar","/administrate.jar", "&"]
- 第一行命令指定镜像的基础镜像,即底包,注意,千万不要用open-jdk的底包
- 第二行指定作者的信息
- 第三行暴露容器的端口,也即访问项目的端口
- 第四行是匿名挂载容器内的/administrate到宿主机,到宿主机的哪个目录下,与docker的安装路径有关,防止容器删除后数据丢失
参考文章:
https://blog.csdn.net/qq32933432/article/details/120944205
https://ithelp.ithome.com.tw/articles/10192703
https://segmentfault.com/a/1190000041372407
http://blog.fpliu.com/it/software/Docker/Dockerfile/volume - 第五行是复制maven打包后的jar包到容器内
- 第六行是设置环境变量:时区
- 第七行是执行脚本
分为两部分:
touch /administrate.jar是更新jar文件的atime、mtime、ctime,个人认为,这行命令有点多余,因为前面已经复制过这个jar包了,如果这个jar包不存在,创建一个空的也没有意义。
参考文章:
https://blog.csdn.net/weixin_41280381/article/details/123899254
https://www.thinbug.com/q/47755395
https://stackoverflow.com/questions/47755395/what-does-run-sh-c-touch-app-jar-do
https://www.muzhuangnet.com/show/81518.html
ln -snf /usr/share/zoneinfo/$TZ /etc/localtime
和echo $TZ > /etc/timezone
是为了设置时区
参考文章:
https://blog.csdn.net/u013302168/article/details/125297770
https://www.cnblogs.com/tonggc1668/p/15231254.html - 第八行是容器启动之后执行的命令,
java -jar administrate.jar &
,即启动jar
其中&可有可无,他的作用是:当前ssh窗口不被锁定(应该是CTRL + C不可打断程序运行),但是当窗口关闭时,程序中止运行
https://blog.csdn.net/weixin_39928446/article/details/125843184
https://www.cnblogs.com/heroinss/p/11592860.html
其他参考文章:
https://blog.csdn.net/yueyue763184/article/details/127761071
https://blog.csdn.net/qq_33043025/article/details/124757690
总结
至此就解析完了,理解了之后,发现并没有那么难