Dockerfile基本語法

Dockerfile的組成

Dockerfile分爲四部分:python

  • 基礎鏡像信息
  • 維護者信息
  • 鏡像操做指令
  • 容器啓動時執行指令

Dockerfile指令說明

FROM

格式爲FROM <image>或者FROM <image>:<tag>
第一條指令必須爲FROM指令。而且,若是在同一個Dockerfile中建立多個鏡像時,能夠使用多個FROM指令(每一個鏡像一次)
示例:docker

FROM centos:6.6

MAINTAINER

格式爲MAINTAINER <name>,指定維護者信息
示例:shell

MAINTAINER Breeze Yan<yan_ruo_gu@163.com>

RUN

格式爲RUN <command>或者RUN ["executable","param1","param2"]
前者將在shell終端中運行命令,即/bin/sh -c;後者使用exec執行。每條RUN指令將在當前鏡像基礎上執行指定命令,並提交爲新的鏡像。當命令較長時,能夠使用\來換行。
示例:數據庫

RUN ["/bin/bash", "-c","echo hello"]

CMD

支持三種格式: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

格式爲EXPOSE <port> [<port>...]
告訴docker容器暴露的端口,供互聯繫統使用。在啓動容器時須要經過-P,docker主機會自動分配 一個端口轉發到指定的端口,使用-p,則能夠具體指定哪一個本地端口映射過來。bash

示例:app

EXPOSE 22 80

ENV

格式爲ENV <key> <value>
指定一個環境變量,會被後續RUN指令使用,並在容器運行時保持ui

示例:code

ENV TZ "Asia/Shanghai"
ENV TERM xterm

ADD

格式爲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

格式爲COPY <src> <dest>
與ADD相似,複製本地主機的<src>爲容器中的<dest>,目標路徑不存在時,會自動建立。當使用本地目錄爲源目錄時,推薦使用COPY

ENTRYPOINT

格式:

ENTRYPOINT ["executable","param1","param2"]
ENTRYPOINT command param1 param2 (shell中執行)

與CMD相似,配置容器啓動後執行的命令,但不會被docker run 提供的參數覆蓋。每一個dockerfile只能有一個ENTRYPOINT,若是指定了多個,只有最後一個被執行

VOLUME

格式爲VOLUME ["/data"]
建立一個掛載點,相似於容器啓動時使用的-v選項,只不過這裏不能指定掛載到宿主機的位置。默認爲/var/lib/docker/vfs目錄下。通常用來存放數據庫和須要保持的數據。

USER

格式爲 USER daemon
指定運行容器時的用戶名或UID,後續的RUN也會使用指定用戶。當服務不須要管理員權限時,能夠經過該命令指定運行用戶。而且能夠在以前建立所須要的用戶。要臨時獲取管理員權限時能夠使用gosu。

WORKDIR

格式爲WORKDIR /path/to/workdir
爲後續的RUN、CMD、ENTRYPOINT指令配置工做目錄。能夠使用多個WORKDIR指令,後續命令若是參數是相對路徑,則會基於以前命令指定的路徑。

示例:

# 最終路徑爲/a/b/c
WORKDIR /a
WORKDIR b
WORKDIR c

ONBUILD

格式爲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

使用Dockerfile生成鏡像

#mysoft/centos:6.6爲新生成的鏡像的標籤,/tmp/dockerfile/centos6爲dockerfile所在路徑。
docker build -t mysoft/centos:6.6 /tmp/dockerfile/centos6
相關文章
相關標籤/搜索