Docker之Dockerfile指令

Dockerfile關於

 在Docker中建立鏡像最經常使用的方式,就是使用DockerfileDockerfile是一個Docker鏡像的描述文件,Dockerfile包含了一條條的指令,每一條指令構建一層,所以每一條指令的內容,就是描述該層應當如何構建。html

Dockerfile思惟導圖

Dockerfile示例

# FROM指定所需依賴的基礎鏡像 ,格式:FROM <image>:<tag>
FROM java:8

# 持久化到指定目錄
VOLUME /tmp

# ADD複製文件,格式:ADD <src> <dest>
ADD eureka-server-1.0-SNAPSHOT.jar  app.jar

# RUN在容器構建過程當中執行的命令,格式:RUN <command>
RUN bash  -c "touch /app.jar"

# EXPOSE聲明須要對外暴露的端口
EXPOSE  8761

#ENTRYPOINT 指定docker容器啓動時執行的命令
##"-Djava.security.egd=file:/dev/./urandom" 加快隨機數產生過程
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"] 
複製代碼

Dockerfile經常使用指令

2.1 FROM

  指明構建的新鏡像是來自於哪一個基礎鏡像,例如:java

FROM centos:6
複製代碼

2.2 MAINTAINER

  指明鏡像維護者及其聯繫方式(通常是郵箱地址),例如:mysql

MAINTAINER DuebassLei <1130122701@qq.com>
複製代碼

  不過,MAINTAINER並不推薦使用,更推薦使用LABEL來指定鏡像做者,例如:sql

LABEL maintainer="DuebassLei"
複製代碼

2.3 RUN

  構建鏡像時運行的Shell命令,例如:docker

RUN ["yum", "install", "httpd"]
RUN yum install httpd
複製代碼

2.4 CMD

  啓動容器時執行的Shell命令,例如:centos

CMD ["-C", "/start.sh"] 
CMD ["/usr/sbin/sshd", "-D"] 
CMD /usr/sbin/sshd -D
複製代碼

2.5 EXPOSE

  聲明容器運行的服務端口,例如:bash

EXPOSE 80 443
複製代碼

2.6 ENV

  設置環境內環境變量,例如:app

ENV MYSQL_ROOT_PASSWORD 123456
ENV JAVA_HOME /usr/local/jdk1.8.0_45
複製代碼

2.7 ADD

  拷貝文件或目錄到鏡像中,例如:dom

ADD <src>...<dest>
ADD html.tar.gz /var/www/html
ADD https://xxx.com/html.tar.gz /var/www/html
複製代碼

  ***PS:***若是是URL或壓縮包,會自動下載或自動解壓。ssh

2.8 COPY

  拷貝文件或目錄到鏡像中,用法同ADD,只是不支持自動下載和解壓,例如:

COPY ./start.sh /start.sh
複製代碼

2.9 ENTRYPOINT

  啓動容器時執行的Shell命令,同CMD相似,只是由ENTRYPOINT啓動的程序不會被docker run命令行指定的參數所覆蓋,並且,這些命令行參數會被看成參數傳遞給ENTRYPOINT指定指定的程序,例如:

ENTRYPOINT ["/bin/bash", "-C", "/start.sh"]
ENTRYPOINT /bin/bash -C '/start.sh'
複製代碼

  ***PS:***Dockerfile文件中也能夠存在多個ENTRYPOINT指令,但僅有最後一個會生效。

2.10 VOLUME

  指定容器掛載點到宿主機自動生成的目錄或其餘容器,例如:

VOLUME ["/var/lib/mysql"]
複製代碼

  ***PS:***通常不會在Dockerfile中用到,更常見的仍是在docker run的時候指定-v數據卷。

2.11 USER

  爲RUN、CMD和ENTRYPOINT執行Shell命令指定運行用戶,例如:

USER <user>[:<usergroup>]
USER <UID>[:<UID>]
USER edisonzhou
複製代碼

2.12 WORKDIR

  爲RUN、CMD、ENTRYPOINT以及COPY和AND設置工做目錄,例如:

WORKDIR /data
複製代碼

2.13 HEALTHCHECK

  告訴Docker如何測試容器以檢查它是否仍在工做,即健康檢查,例如:

HEALTHCHECK --interval=5m --timeout=3s --retries=3 \
    CMD curl -f http:/localhost/ || exit 1
複製代碼

一些選項的說明:

  • --interval=DURATION (default: 30s):每隔多長時間探測一次,默認30秒
  • -- timeout= DURATION (default: 30s):服務響應超時時長,默認30秒
  • --start-period= DURATION (default: 0s):服務啓動多久後開始探測,默認0秒
  • --retries=N (default: 3):認爲檢測失敗幾回爲宕機,默認3次

一些返回值的說明:

  • 0:容器成功是健康的,隨時可使用
  • 1:不健康的容器沒法正常工做
  • 2:保留不使用此退出代碼

2.14 ARG

  在構建鏡像時,指定一些參數,例如:

FROM centos:6
ARG user # ARG user=root
USER $user
複製代碼

  這時,咱們在docker build時能夠帶上自定義參數user了,以下所示:

docker build --build-arg user=DuebassLei Dockerfile .
複製代碼

參考

你必須知道的Dockerfile

Dockerfile reference

相關文章
相關標籤/搜索