Springboot-Dockerfile指令


1、FROM指定基礎鏡像。FROM指令是Dockfile文件中的收條命令,啟動構建流程后,Docker將會給予該鏡像構建新鏡像。

FROM <image>
或者
FROM <image>:<tag>
或者
FROM <image>:<digest>

 2、RUN執行命令。在鏡像的構建過程中執行特定的命令,並生成一個中間鏡像。

RUN <command>
或者
RUN ["executable", "param1", "param2"]

 3、COPY復制文件

COPY <源路徑>...<目標路徑>
COPY ["<源路徑1>",..."目標路徑"]

 <目標路徑>可以是容器的絕對路徑,也可以是相對工作目錄的相對路徑。目標路徑不需要實現創建,如果目標目錄不存在會在復制文件前先行創建卻是穆勒。

4、ADD添加文件

ADD <源路徑>...<目標路徑>
ADD ["<源路徑1>",..."目標路徑"]

 <源路徑>可以是URL,Docker引擎會試圖去下載這個鏈接的文件到目標路徑去。

5、ENV設置環境變了

ENV <key> <value>
ENV <key1>=<value1> <key2>=<value2>...

 后面的其他指令,以及運行時的應用都可以使用。

6、EXPOSE為構建的鏡像設置監聽端口,使容器在運行時監聽。

EXPOSE <port> [<port>...]

 EXPOSE指令並不會讓容器監聽host的端口。

7、VOLUME用於創建掛載點,即向基於所構建鏡像創始的容器添加卷。

VOLUME ["/data"]

一個卷可以存在於一個或多個容器的指定目錄,該目錄可以繞過聯合文件系統,並具有以下功能:

  • 卷可以容器間共享和重用
  • 容器並不一定要和其它容器共享卷
  • 修改卷后會立即生效
  • 對卷的修改不會對鏡像產生影響
  • 卷會一直存在,直到沒有任何容器在使用它

VOLUME 讓我們可以將源代碼、數據或其它內容添加到鏡像中,而又不並提交到鏡像中,並使我們可以多個容器間共享這些內容。

8、WORKDIR指定工作目錄。

WORKDIR /path/to/workdir

 通過WORKDIR設置工作目錄后,Dockerfile 中其后的命令 RUN、CMD、ENTRYPOINT、ADD、COPY 等命令都會在該目錄下執行

9、USER指定當前用戶

USER user
USER user:group
USER uid
USER uid:gid
USER user:gid
USER uid:group

 使用USER指定用戶時,可以使用用戶名、UID 或 GID,或是兩者的組合

使用USER指定用戶后,Dockerfile 中其后的命令 RUN、CMD、ENTRYPOINT 都將使用該用戶。鏡像構建完成后,通過 docker run 運行容器時,可以通過 -u 參數來覆蓋所指定的用戶。

10、CMD用於指定容器啟動時所要執行的命令。

CMD ["executable","param1","param2"]
CMD ["param1","param2"]
CMD command param1 param2

CMD 在容器運行的時候執行,在構建時不進行任何操作。

11、ENTRYPOINT

ENTRYPOINT 用於給容器配置一個可執行程序。也就是說,每次使用鏡像創建容器時,通過 ENTRYPOINT 指定的程序都會被設置為默認程序。ENTRYPOINT 有以下兩種形式:

 
ENTRYPOINT ["executable", "param1", "param2"]
ENTRYPOINT command param1 param2

 

ENTRYPOINT 與 CMD 非常類似,不同的是通過docker run執行的命令不會覆蓋 ENTRYPOINT,而docker run命令中指定的任何參數,都會被當做參數再次傳遞給 ENTRYPOINT。Dockerfile 中只允許有一個 ENTRYPOINT 命令,多指定時會覆蓋前面的設置,而只執行最后的 ENTRYPOINT 指令。

docker run運行容器時指定的參數都會被傳遞給 ENTRYPOINT ,且會覆蓋 CMD 命令指定的參數。如,執行docker run <image> -d時,-d 參數將被傳遞給入口點。

也可以通過docker run --entrypoint重寫 ENTRYPOINT 入口點。如:可以像下面這樣指定一個容器執行程序:

 
ENTRYPOINT ["/usr/bin/nginx"]

 

完整構建代碼:# Version: 0.0.3

FROM ubuntu:16.04
MAINTAINER 何民三 "cn.liuht@gmail.com"
RUN apt-get update
RUN apt-get install -y nginx
RUN echo 'Hello World, 我是個容器' \ 
   > /var/www/html/index.html
ENTRYPOINT ["/usr/sbin/nginx"]
EXPOSE 80

使用docker build構建鏡像,並將鏡像指定為 itbilu/test:

 
docker build -t="itbilu/test" .

構建完成后,使用itbilu/test啟動一個容器: 

docker run -i -t  itbilu/test -g "daemon off;"

在運行容器時,我們使用了 -g "daemon off;",這個參數將會被傳遞給 ENTRYPOINT,最終在容器中執行的命令為 /usr/sbin/nginx -g "daemon off;"

12、LABEL

LABEL用於為鏡像添加元數據,元數以鍵值對的形式指定:

LABEL <key>=<value> <key>=<value> <key>=<value> ...

 13、ARG指定傳遞給構建運行時的變量

ARG <name>[=<default value>]

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM