Dockerfile分爲四部分:python
格式爲FROM <image>
或者FROM <image>:<tag>
第一條指令必須爲FROM指令。而且,若是在同一個Dockerfile中建立多個鏡像時,能夠使用多個FROM指令(每一個鏡像一次)
示例:docker
FROM centos:6.6
格式爲MAINTAINER <name>
,指定維護者信息
示例:shell
MAINTAINER Breeze Yan<yan_ruo_gu@163.com>
格式爲RUN <command>
或者RUN ["executable","param1","param2"]
前者將在shell終端中運行命令,即/bin/sh -c;後者使用exec執行。每條RUN指令將在當前鏡像基礎上執行指定命令,並提交爲新的鏡像。當命令較長時,能夠使用\來換行。
示例:數據庫
RUN ["/bin/bash", "-c","echo hello"]
支持三種格式:centos
CMD ["executable","param1","param2"] #使用exec執行,推薦的方式 CMD command param1 param2 #在/bin/sh中執行,提供給須要交互的應用 CMD ["param1","param2"] #提供給ENTRYPOINT的默認參數
指定啓動窗口時執行的命令,每一個Dockerfile只能有一條CMD命令。若是指定了多條,只有最後一條會被執行。若是用戶啓動容器時指定了運行的命令,則會覆蓋掉CMD指定的命令
示例:ruby
CMD ["supervisord","-c","/etc/supervisord.conf"]
格式爲EXPOSE <port> [<port>...]
告訴docker容器暴露的端口,供互聯繫統使用。在啓動容器時須要經過-P,docker主機會自動分配 一個端口轉發到指定的端口,使用-p,則能夠具體指定哪一個本地端口映射過來。bash
示例:app
EXPOSE 22 80
格式爲ENV <key> <value>
指定一個環境變量,會被後續RUN指令使用,並在容器運行時保持ui
示例:code
ENV TZ "Asia/Shanghai" ENV TERM xterm
格式爲ADD <src> <dest>
該命令將複製指定的<src>
到容器中的<dest>
。其中<src>
能夠是dockerfile所在目錄的一個相對路徑(文件或目錄),也能夠是一個URL,還能夠是一個tar文件(自動解壓爲目錄)
示例:
ADD aliyun-mirror.repo /etc/yum.repos.d/CentOS-Base.repo ADD aliyun-epel.repo /etc/yum.repos.d/epel.repo
格式爲COPY <src> <dest>
與ADD相似,複製本地主機的<src>
爲容器中的<dest>
,目標路徑不存在時,會自動建立。當使用本地目錄爲源目錄時,推薦使用COPY
格式:
ENTRYPOINT ["executable","param1","param2"] ENTRYPOINT command param1 param2 (shell中執行)
與CMD相似,配置容器啓動後執行的命令,但不會被docker run 提供的參數覆蓋。每一個dockerfile只能有一個ENTRYPOINT,若是指定了多個,只有最後一個被執行
格式爲VOLUME ["/data"]
建立一個掛載點,相似於容器啓動時使用的-v選項,只不過這裏不能指定掛載到宿主機的位置。默認爲/var/lib/docker/vfs目錄下。通常用來存放數據庫和須要保持的數據。
格式爲 USER daemon
指定運行容器時的用戶名或UID,後續的RUN也會使用指定用戶。當服務不須要管理員權限時,能夠經過該命令指定運行用戶。而且能夠在以前建立所須要的用戶。要臨時獲取管理員權限時能夠使用gosu。
格式爲WORKDIR /path/to/workdir
爲後續的RUN、CMD、ENTRYPOINT指令配置工做目錄。能夠使用多個WORKDIR指令,後續命令若是參數是相對路徑,則會基於以前命令指定的路徑。
示例:
# 最終路徑爲/a/b/c WORKDIR /a WORKDIR b WORKDIR c
格式爲ONBUILD [INSTRUTION]
配置當所建立的鏡像做爲其它新建立鏡像的基礎鏡像時,所執行的操做指令。
例如dockerfile使用以下內容建立了鏡像A:
... ONBUILD ADD . /app/src ONBUILD RUN /usr/local/bin/python-build --dir /app/src ...
若是基於鏡像A建立新的鏡像時,新的dockerfile使用FROM A指定基礎鏡像時,會自動執行ONBUILD指令內容,等價於在後面添加了兩條指令。
FROM A ADD . /app/src RUN /usr/local/bin/python-build --dir /app/src
使用ONBUILD指令的鏡像,推薦在標籤中註明,如:ruby:1.9-onbuild
#mysoft/centos:6.6爲新生成的鏡像的標籤,/tmp/dockerfile/centos6爲dockerfile所在路徑。 docker build -t mysoft/centos:6.6 /tmp/dockerfile/centos6