1. 程式人生 > >【Docker】(6)---Dockerfile檔案

【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。該步驟是可選的。
通俗解釋

:預設情況下,容器不使用任何 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)