springboot項目打包鏡像中的Dockerfile文件
在講Dockerfile文件之前應該先講下maven的一個插件叫:dockerfile-maven-plugin
。他們是組合一起用的
一、dockerfile-maven-plugin
該maven插件可以實現由java源代碼直接到docker鏡像,配置了dockerfile-maven-plugin插件的maven工具就像是一個管道,一端輸入Java源代碼, 另一端直接輸出docker鏡像。在dockerfile-maven-plugin插件出現之前,還有一個maven插件是docker-maven-plugin,是由同一個作者創造,兩個 插件的設計思想是有差別的,前者需要獨立編寫Dockerfile文件,后者允許沒有Dockerfile文件,所有的docker相關配置都寫在pom文件的plugin中,這樣使maven插件顯得很笨重,並且如果脫離了這個maven插件還得重寫編寫Dockerfile,不夠靈活。
因此,推薦使用maven插件:dockerfile-maven-plugin
。
查看pom中插件
<!--指定一個名字而已~-->
<properties>
<docker.image.prefix>xuxiaoxiao</docker.image.prefix>
</properties>
<build>
<finalName>eureka-server</finalName>
<plugins>
<!--Docker打包鏡像 插件-->
<plugin>
<!--三個坐標定位dockerfile插件-->
<groupId>com.spotify</groupId>
<artifactId>dockerfile-maven-plugin</artifactId>
<version>1.4.7</version>
<configuration>
<!--這里指定打包鏡像的名稱-->
<repository>${docker.image.prefix}/${project.artifactId}</repository>
<!-- 這里是復制 jar 包到 docker 容器指定目錄配置 -->
<buildArgs>
<JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE>
</buildArgs>
</configuration>
</plugin>
</plugins>
</build>
二、Dockerfile文件
先貼出,上一篇博客Dockerfile文件完整版,再來一個一個分析。
FROM openjdk:8-jdk-alpine
VOLUME /tmp
ARG JAR_FILE
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java","-jar","/app.jar"]
1、FORM
,這是引入一個父鏡像,在此基礎上進行添加只讀層。之前我寫過,鏡像可以理解成由一層層只讀層組成,FORM下面的命令,可以理解就是在已有的只讀層,添加只讀層。FORM可以有多個,但最上面的一定是FROM命令。
2、VOLUME
,配置一個具有持久化功能的目錄,主機 /var/lib/docker 目錄下創建了一個臨時文件,並鏈接到容器的/tmp。該步驟是可選的。
通俗解釋
:默認情況下,容器不使用任何 volume,此時,容器的數據被保存在容器之內,它只在容器的生命周期內存在,會隨着容器的被刪除而被刪除。
因為如果你不想在容器刪除后,容器的數據也被刪除,那么就可以指定持久化目錄。它被設計用來保存數據,而不管容器的生命周期。因此,當你刪除一個容器時,Docker 肯定不會自動地刪除一個volume。
3、ARG
, 設置編譯鏡像時加入的參數。 這里的JAR_FILE就是maven插件中的<JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE>
4、COPY
,只支持將本地文件復制到容器 ,還有個ADD更強大但復雜點。
5、ENTRYPOINT
容器啟動時執行的命令。這里就是java -jar app.jar
當然Dockerfile的命令說明官網有標准文檔,以后有需要會再回過來查看官方文檔。
[Dockerfile官方文檔] (https://docs.docker.com/engine/reference/builder/#usage)
### 參考
1、理解Docker(8):Docker 存儲之卷(Volume)
``` 如果一個人充滿快樂,正面的思想,那么好的人事物就會和他共鳴,而且被他吸引過來。同樣,一個人老帶悲傷,倒霉的事情也會跟過來。
——在自己心情低落的時候,告誡自己不要把負能量帶給別人。(大校8)