Dockerfile詳解

ADD

ADD命令有兩個參數,源和目標。它的基本作用是從源系統的文件系統上復制文件到目標容器的文件系統。如果源是一個URL,那該URL的內容將被下載并復制到容器中。

COPY

格式為:COPY

復制本地主機的 (為 Dockerfile 所在目錄的相對路徑,文件或目錄) 為容器中的 。目標路徑不存在時,會自動創建。當使用本地目錄為源目錄時,推薦使用 COPY。

RUN

RUN命令是Dockerfile執行命令的核心部分。它接受命令作為參數并用于創建鏡像。不像CMD命令,RUN命令用于創建鏡像(在之前commit的層之上形成新的層)。有兩種方式:

1)RUN ? 例如:RUN sh -c 'source $HOME/.bashrc ; echo $HOME'

2)RUN ["executable", "param1", "param2"]? 例如:

一個Dockerfile中可以有多個RUN命令

CMD

和RUN命令相似,CMD可以用于執行特定的命令。和RUN不同的是,這些命令不是在鏡像構建的過程中執行的,而是在Container啟動時執行的命令,一個Dockerfile中只能有一條CMD命令,多條則只執行最后一條CMD。

3種執行格式:

- `CMD ["executable","param1","param2"]` ,`exec`格式,推薦使用這種格式。例如:CMD ["java", "-jar", "spring-boot-maven-docker.jar"]

- `CMD ["param1","param2"]`,作為`ENTRYPOINT`的默認參數。

- `CMD command param1 param2`,`shell`格式。

ENTRYPOINT

有兩種格式:

ENTRYPOINT [“executable”, “param1”, “param2”]

ENTRYPOINT command param1 param2 (shell 中執行)

配置容器啟動后執行的命令,并且不會被 docker run 提供的參數覆蓋。而CMD則會

每個 Dockerfile 中只能有一個 ENTRYPOINT,當指定多個 ENTRYPOINT 時,只有最后一個生效。例如:

ENTRYPOINT [ "sh", "-c", "java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar /userApp.jar" ]

ENV

ENV命令用于設置環境變量。這些變量以”key=value”的形式存在,會被后續 RUN 指令使用,并在容器運行時保持。

EXPOSE

EXPOSE用來指定端口,使容器內的應用可以通過端口和外界交互。

FROM

FROM命令可能是最重要的Dockerfile命令。該命令定義了使用哪個基礎鏡像啟動構建流程。基礎鏡像可以為任意鏡像。如果基礎鏡像沒有被發現,Docker將試圖從Docker image index來查找該鏡像。FROM命令必須是Dockerfile的首個命令。

MAINTAINER

建議這個命令放在Dockerfile的起始部分,雖然理論上它可以放置于Dockerfile的任意位置。這個命令用于聲明作者,并應該放在FROM的后面。

LABEL

key=value,可以多個。

USER

使用哪個用戶跑container。

VOLUME

可以將本地文件夾或者其他container的文件夾掛載到container中,用于讓你的容器訪問宿主機上的目錄。

WORKDIR

切換目錄用,可以多次切換(相當于cd命令),對RUN,CMD,ENTRYPOINT生效。

【實例】

FROM node

RUN mkdir -p /home/nodejs/user ? //在鏡像中創建目錄

WORKDIR /home/nodejs/user //cd到鏡像中的目錄

COPY . /home/nodejs/user //拷貝本機中當前目錄內容到鏡像中目錄

RUN npm config set registry https://registry.npm.taobao.org? //設置鏡像中npm registry

RUN npm info underscore

RUN npm install? //鏡像中執行npm install

RUN npm run build? //鏡像中執行編譯

ENV NODE_EVN production? //設置鏡像中環境變量

ENV USER_ENV test

ENV USER_PORT 3200

ENV SVR_USER_API_BASE_URL http://test.user.com:8080

EXPOSE 3200

CMD ["npm", "start"]

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 0. 前言 docker是什么?docker是用GO語言開發的應用容器引擎,基于容器化,沙箱機制的應用部署技術。可...
    sessionboy閱讀 3,884評論 2 49
  • docker基本概念 1. Image Definition 鏡像 Image 就是一堆只讀層 read-only...
    慢清塵閱讀 8,836評論 1 21
  • 轉載自 http://blog.opskumu.com/docker.html 一、Docker 簡介 Docke...
    極客圈閱讀 10,544評論 0 120
  • 上師告訴我,發心就等于修行,發心過程中,難免會遇到質疑,既然我們發了菩提心,就是為了如母眾生,舍棄自我,所以,不要...
    一路蓮花閱讀 529評論 0 0
  • 小時候 我有一方小小的天空 淺淺的 容不下太多憂愁 憂傷或是快樂 我都會望著它 快樂著所有的快樂 憂傷著全部的憂傷
    宗宣先生閱讀 134評論 0 3