dockerfile由一行行命令語句組成,支援以#開頭的注釋行。一般分為四個部分:基礎映象資訊,維護者資訊,映象操作指令和容器啟動時執行指令。例如:
# this dockerfile uses the ubuntu image
# version 2 -edition 1
# author: docker_user
# command format: instruction [arguments / command] ..
# 第一行必須指定基於的基礎映象
from ubuntu
# 維護者資訊
maintainer docker_user [email protected]
# 映象的操作指令
run echo
"deb raring main universe"
>> /etc/apt/sources.list
run apt-get update &&
apt-get
install -y nginx
run echo
"\ndaemon off;"
>> /etc/nginx/nginx.conf
# 容器啟動時執行指令
cmd /usr/sbin/nginx
每執行一條run指令,映象新增新的一層,並提交。
下面兩個dockerhub上的dockerfile的例子。
# nginx
## version 0.0.1
from ubuntu
maintainer victor vieux
run apt-get update &&
apt-get
install -y inotify-tools nginx apache2 openssh-server
# 在ubuntu的父映象基礎上安裝inotify-tools,nginx,apache2,openssh-server,從而建立乙個新的nginx映象。
# firefox over vnc
##version 0.3
from ubuntu
# install vnc,xvfb in order to create a 'fake' display and firefox
run apt-get update &&
apt-get
install -y x11vnc firefox
run mkdir /.vnc
# setup a pssword
run x11vnc -storepasswd 1234 ~/.vnc/passwd
#autostart firefox
run bash -c 'echo "firefox" >> /.bashrc'
expose 5900
cmd [
"x11vnc", "-forever", "-usepw", "-create"
]# 基於ubuntu父映象,安裝firefox和vnc軟體,啟動後,使用者可以通過5900埠通過vnc方式使用firefox。
指令的一般格式為instruction arguments,指令包括from、maintainer、run等。
from
格式為from 或者from :。
第一條指令必須為from指令,如果同乙個dockerfile中建立多個映象時,可以使用多個from指令。
maintainer
格式為maintainer ,指定維護者資訊。
run
格式為run 或者run [
"executable", "param1", "param2"
]。
前者在shell終端中執行,即/bin/sh -c ;後者則使用exec執行。指定使用其他終端可以通過第二種方式實現,例如run ["/bin/bash", 「-c」, 「echo hello」]。
每條run指令將在當前映象基礎上執行命令,並提交為新的映象。當命令較長時可以使用\來換行。
cmd
支援三種格式:
- cmd [
"executable", "param1", "param2"
]使用exec執行,推薦方式。
- cmd command param1 param2 在/bin/sh中執行,需要互動的應用。
- cmd [
"param1", "param2"
]提供給entrypoint的預設引數。
注:指定啟動容器時執行的命令,每個dockerfile只能有一條cmd命令,如果指定了多條命令,只有最後一條會被執行。
如果使用者啟動容器時候指定了執行的命令,則會覆蓋掉cmd指定的命令。
expose
格式為expose
[...]。
例如, expose 22 80 8443
告訴docker服務端容器暴露的埠號,供互聯系統使用。在啟動容器時需要通過-p,主機會自動分配乙個埠**到指定的埠,使用-p,則可以具體指定哪個本地埠對映過來。
env
格式為env
。
指定乙個環境變數,會被後續run指令使用,並在容器執行時保持。例如env pg_major 9.3
env pg_version 9.3.4
run curl -sl |
tar -xjc /usr/src/postgress &&
...env path /usr/local/postgres-$pg_major/bin:$path
add格式為add
該命令將複製指定的到容器中的。其中可以是dockerfile所在目錄的乙個相對路徑(檔案或目錄),也可以是乙個url,還可以是乙個tar檔案(自動解壓為目錄)。
copy
格式為copy
。
複製本地主機的(為dockerfile所在目錄的相對路徑,檔案或目錄)為容器的。目標路徑不存在時,會自動建立。當使用本地目錄為源目錄時,推薦使用copy。
entrypoint
有兩種格式
entrypoint [
"executable", "param1", "param2"
]entrypoint command param1 param2(shell中執行)
配置容器啟動後執行的命令,並且不可被docker run提供的引數覆蓋。每個dockerfile只能有乙個entrypoint,最後乙個生效。
volume
格式為volume [
"/data"
]。
建立乙個可以從本地主機或其他容器掛載的掛載點,一般存放資料庫和需要保持的資料。
user
格式為user daemon
指定執行容器時的使用者名稱或者uid,後續的run也會使用指定使用者。
當服務不需要管理員許可權時,可以通過該命令指定執行使用者。並且可以在之前建立所需要的使用者,例如:run groupadd -r postgres &&
useradd -r -g postgres postgres。要臨時獲取管理員許可權可以使用gosu,而不推薦sudo。
workdir
格式為workdir /path/to/workdir。
為後續的run、cmd、entrypoint指令配置工作目錄。
可以使用多個workdir指令,後續命令如果引數是相對路徑,則會基於之前指定的路徑。例如:
workdir /a
workdir b
workdir c
run pwd
最終路徑為/a/b/c。
onbuild
格式為onbuild [instruction]。
配置當前所建立的映象作為其他新建立映象的基礎映象時,所執行的操作指令。例如,dockerfile使用如下的內容建立了映象image-a。[
...]
[...]
如果基於image-a建立新的映象時,新的dockerfile中使用from image-a指定基礎映象時,會自動執行onbuild指令內容,等價於在後面新增了兩條指令。from image-a
#automatically run the following
使用onbuild指令的映象,推薦在標籤中註明,例如ruby:1.9-onbuild。
基本格式 docker build [選項] 路徑,該命令將讀取指定路徑下(包括子目錄)的dockerfile,並將該路徑下所有內容傳送給docker服務端,由服務端建立映象。因此一般建議放置dockerfile的目錄為空目錄。
Dockerfile基本結構
1.dockerfile是乙個文字格式的配置檔案,使用者可以使用dockerfile快速建立自定義的映象。2.dockerfile檔案分為四個部分 a.基礎映象資訊 在dockerfile中使用 完成一行的註解 第一行必須制定基礎映象 from centos b.維護者資訊 維護者資訊 mainta...
Dockerfile基本用法
docker 並不建議使用者通過commit方式構建映象。原因如下 用dockerfile構建映象,底層也docker commit 一層一層構建新映象的。1.執行docker build命令,t將新映象命名,末尾的.指名build context為當前目錄,從當前目錄下尋找dockerfile,也...
Dockerfile中的基本指令
dockerfile是由一系列命令和引數構成的指令碼,這些命令應用於基礎映象並最終建立乙個新的映象。它們簡化了從頭到尾的流程並極大的簡化了部署工作。dockerfile從from命令開始,緊接著跟隨者各種方法,命令和引數。其產出為乙個新的可以用於建立容器的映象。dockerfile僅僅是構建dock...