Dockerfile中經常使用的指令CMD,ENTRYPOINT,ADD,COPY,VOLUME,WORKDIR,USER,ONBUILD和ENV等nginx
CMD指令用於指定一個容器啓動時要運行的命令,和RUN指令相似,只是RUN指令是指定鏡像被構建時要運行的指令,而CMD是指定容器被啓動時要運行的命令。web
docker run -it paulversion/static_web /bin/true 和Dockerfile中使用CMD ["/bin/true"] docker
CMD能夠爲要運行的命令指定參數 CMD ["/bin/bash","-l"] 將-l標誌傳遞給了/bin/bash命令apache
使用docker run 命令能夠覆蓋CMD指令。若是咱們在Dockerfile裏指定了CMD,而同時在docker run命令行中也指定了要運行的命令,命令行中指定的命令會覆蓋Dockerfile中的CMD指令。在Dockerfile數組
中只能指定一條CMD指令。若是指定了多條CMD指令,也只有最後一條CMD指令會被使用。bash
ENTRYPOINT指令與CMD指令很是相似。Docker run命令行中指定的任何參數都會被當作參數再次傳遞給ENTRYPOINT指令中指定的命令服務器
指定 ENTRYPOINT指令 ENTRYPOINT ["/usr/sbin/nginx"]相似於CMD指令,咱們也能夠在該指令中經過數組的方式爲命令指定相應的參數如 ENTRYPOINT ["usr/sbin/nginx","-g","daemon off;"]app
同時使用ENTRYPOINT和CMD指令來完成一些巧妙的工做 ENTRYPOINT ["/usr/sbin/nginx"] CMD["h"]若是啓動容器時不指定任何參數,則在CMD指令中指定的-h參數會被傳遞給Nginx守護進程,即Nginx 服務器會以/usr/sbin/nginx -h 的方式啓動webapp
WORKDIR指令用來在從鏡像建立一個新容器時,在容器內部設置一個工做目錄 ENTRYPOINT或CMD指定的程序會在這個目錄下執行ui
WOKEDIR /opt/webapp/db
RUN bundle install
咱們將工做目錄切換到/opt/webapp/db後運行bundle install 命令 能夠經過-w標誌在運行時覆蓋工做目錄 如 docker run -it -w /var/log web_static 該命令會將容器內的工做目錄設置爲 /var/log
ENV
ENV 指令用來在鏡像構建過程當中設置環境變量 如 ENV RVM_PATH /home/rvm/ 這個新的環境變量能夠在後續的任何RUN 命令中使用
USER
USER指令用來指定該鏡像以什麼樣的用戶去運行 例如USER nginx基於該鏡像啓動的容器會以nginx用戶的身份來運行,咱們能夠指定用戶名或uid以及組或GID,甚至是二者的組合
ADD
ADD指令用來將構建環境下的文件和目錄複製到鏡像中。在安裝一個應用程序時ADD指令須要源文件位置和目的文件位置兩個參數 ADD software.lic /opt/application/softeware.lic
COPY
COPY 和ADD 類似COPY不會去作文件提取和解壓的工做 COPY conf.d/ /etc/apache2/ 目錄中
ONBUILD
ONBUILD指令能爲鏡像添加觸發器trigger.當一個鏡像被用作其餘鏡像的基礎鏡像時,該鏡像中的觸發器將會被執行。