標籤:docker 協助 docker命令解釋 dockerfile
Dockerfile功能以及其工作流程
docker可以通過自動閱讀dockerfile檔案建立鏡像,dockerfile是一個文字文件型的,所有使用者能在命令列進行的操作命令都可以在此定義,從而將這些命令組合起來,並產生一個直接可用的鏡像。使用“docker build”,使用者可以連續執行多個指令,從而實現構建的自動化。本文將會介紹在dockerfile中可以執行的命令參數。
docker build命令可以從一個dockerfile或者一個文本構建鏡像,構建文本可以是一個本地路徑或者是一個GIT的URL路徑。"docker build ."表示使用目前的目錄作為上下文進行構建(警告,不要在根目錄執行此命令,這將會把你的硬碟的上下文資訊全部傳送到docker進程當中,自己想想後果吧),預設情況下,如果不使用-f選項指定,會載入名為Dockerfiler的檔案。然後可以使用-t選項指定構建鏡像的tag標籤以及倉庫名稱,例如(可以添加多個參數):
docker build -t shykes/myapp:1.0.2 -t shykes/myapp:latest .
docker的構建操作是由docker守護進程完成的,而非CLI(命令列操作)。其構建順序是,首先把上下文資訊發送到進程,然後docker守護進程將會依次執行Dockerfile裡面的指令到新的鏡像當中,並且會在結束後自動清除上下文資訊。為了提升Docker效能,還可以在上下文目錄添加一個".dockerignore"檔案。需要注意的是,Dockerfile中的每一條指令都是完全獨立的,也就是說你不能指望通過"RUN cd /tmp"指令,將下一條指令的工作環境設定到"/tmp"目錄下面。
docker會盡量使用鏡像緩衝(預設),從而提高其工作效能。當然,也可以通過"--no-cache=true"不使用緩衝構建。構建完成後,就可以通過push指令上傳到指定註冊中心的倉庫了。
Dockerfile寫作風格:
一,基本文法
# Comment
INSTRUCTION arguments
"INSTRUCTION"是不區分大小寫,但是為了區分起見,以大寫為好。Dockerfile每一行僅支援一條指令,Dockerfile的起始位置的第一個非注釋行需要使用"FROM"指令指定構建使用的來源鏡像,指令地區的起始最好有以"#"的注釋行,以說明目前範圍執行的任務內容。
二,變數置換
-
在dockerfile中,變數聲明可以表示為$variable_name或者${variable_name},主要是用來區別沒有空格的變數,例如${foo}_bar。
-
dockerfile中的變數聲明也支援少量的bash修飾符,例如:
-
word可以為任一字元串,包含附加的環境變數
-
也可以使用"\"符號進行轉義,例如"\$foo"表示內容就是"$foo"
-
環境變數可以在以下指令中使用:
-
環境變數支援替換
三,dockerignore file
在docker執行命令(發送上下文資訊到進程之前)時,如果存在".dockerignore"檔案,則其中定義的檔案或目錄不ADD或COPY指令添加到鏡像當中。例如:
*/temp* #如,/aa/template.txt
*/*/temp* #如,/aa/bb/template.conf
temp? #如,/tempaa或/tempbb
*.md
!README.md #取反,這兩行結合使用,表示包含所有以.md結尾的,除了README.md以外的檔案
使用匹配格式都參照go語言風格
Dockerfile指令說明:
-
FROM
-
MAINTAINER
-
作用:指定產生鏡像的作者
-
文法:MAINTAIN <name>
-
RUN
-
CMD
-
LABEL
-
作用:LABEL指令用來添加一些中繼資料到鏡像當中,LABEL是索引值對類型資料,一個鏡像可以有一個或者多個標籤,但是過多的標籤則會導致產生一個低能的鏡像。當指定多個標籤時,盡量在一層顯示,而不是使用多個LABEL指令指定。可以使用docker inspect查看鏡像的LABEL資訊
-
文法:LABEL <key>=<value> <key>=<value> <key>=<value> <key>=<value> ……
-
EXPOSE
-
ENV
-
ADD
-
COPY
-
ENTRYPOINT
FROM ubuntu
CMD ["-l"]
ENTRYPOINT ["/usr/bin/ls"]
-
文法:ENTRYPOINT同樣有兩種文法
-
ENTRYPOINT ["executable", "param1", "param2"]
-
ENTRYPOINT command param1 param2
本文出自 “致信” 部落格,請務必保留此出處http://leon0long.blog.51cto.com/3011404/1768324
Docker配置指南(三):Dockerfile(一)