【Docker】(6)---Dockerfile檔案
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。該步驟是可選的。
通俗解釋
因為如果你不想在容器刪除後,容器的資料也被刪除,那麼就可以指定持久化目錄。它被設計用來儲存資料,而不管容器的生命週期。因此,當你刪除一個容器時,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)