FROM
:獲取基礎鏡像,FROM必須是第一個命令,如果需要多個鏡像時,可以使用多個FROM指令(每個鏡像一次),如果不加tag,默認是使用latest,如下所示:
# FROM <image name>
# FROM <image name>:<tag>
FROM ubuntu
FROM java:8
RUN
:在構建鏡像過程中執行特定的指令,並生成一箇中間鏡像
-
RUN <commond>
:shell格式 -
RUN ["executable", "param1", "param2"]
:exec格式
CMD
:指定容器運行時的默認參數,如果出現多次以最後一次爲準
-
CMD ["executable", "param1", "param2"]
:exec格式 -
CMD command param1 param2
:shell格式
LABEL
:給構建的鏡像打標籤,如果base image中也有標籤,則繼承,如果是同名標籤,則覆蓋。爲了減少圖層數量,儘量將標籤寫在一個LABEL
指令中去
LABEL <key>=<value> <key>=<value> ...
# 實例
LABEL multi.lable1="value1" multi.lable2="value2" other="value3"
EXPOSE
:爲構建的鏡像設置監聽端口,但是並不會讓容器監聽host的端口
EXPOSE <port> [<port>...]
#多個映射接口
EXPOSE 8080
EXPOSE 8090
EXPOSE 9090
ENV
:在構建的鏡像中設置環境變量
#可以設置多個環境變量,如果<value>中存在空格,需要轉義或用引號"括起來
ENV myName="John Doe" \
myDog=Rex\ The\ Dog \
myCat=fluffy
ADD
:在構建鏡像時,複製文件到鏡像中
# <src>可以是文件、目錄,也可以是文件URL,如果<src>是個目錄,則複製的是目錄下的所有內容,但不包括該目錄
# <dest>可以是絕對路徑,也可以是相對WORKDIR目錄的相對路徑
ADD <src>... <dest>
ADD ["<src>",... "<dest>"]
ENTRYPOINT
:指定鏡像的執行程序,只有最後一條的ENTRYPOINT
指令有效
#CMD和ENTRYPOINT至少得使用一個。ENTRYPOINT應該被當做docker的可執行程序,CMD應該被當做ENTRYPOINT的默認參數
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
VOLUME
:指定鏡像內的目錄爲數據卷,使此目錄具有持久化存儲數據的功能,該目錄可以被容器本身訪問,也可以被其他容器訪問
VOLUME ["/var/log"]
VOLUME /var/log /var/db
下面是兩個簡單的構建鏡像的Dockerfile文件,分別是後臺的和前端的項目
後臺SpringBoot項目:
FROM java:8
ADD nile-mz-analysis-be-0.0.1.jar app.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
前端項目:
FROM nginx
RUN rm -rf /etc/nginx/nginx.conf
ADD mz-feature-mwc-customization /etc/nginx/html/mz-feature-mwc-customization
ADD nginx.conf /etc/nginx/nginx.conf