dockerfile是乙個普通的文字檔案,裡面包含了許多可以在命令列介面上執行的用來構建映象的相關指令,通過docker build指令就可以讀取dockerfile檔案中的指令並執行自動化映象構建。
一般情況下,dockerfile檔案可分為四個部分:基礎映象資訊、維護者資訊、映象操作指令、容器啟動時的執行指令。
dockerfile檔案由多條命令語句組成,每條語句都代表乙個指令,以「#」開頭的指令表示注釋,當一條指令過長時,可以用反斜槓「\」進行指令換行。
## dockerfile檔案格式
# this dockerfile uses the ubuntu image
# version 2 - edition 1
# author: docker_user
# command format: instruction [arguments / command] ..
# 1、第一行必須定義基礎映象資訊
from ubuntu
# 2、定義該映象的維護者資訊
maintainer docker_user [email protected]
# 3、一些映象操作指令
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
# 4、容器啟動執行指令
cmd /usr/sbin/nginx
1.from
from指令用於初始化乙個新的映象構建階段,同時為之後的指令設定乙個基礎映象。語法格式如下:
from
from :
具體示例如下:
from ubuntu
from ubuntu:16.04
2.maintainer
maintainer指令用於指定當前構建的映象維護者資訊,該指令沒有具體的格式要求,通常建議使用使用者名稱和郵箱進行標識。具體示例如下:
maintainer "****ou"
3.run
run指令用於執行指定的指令碼命令,有兩種格式。語法格式如下:
run
run ["executable", "param1", "param2"]
其中每條run指令將在當前映象基礎上執行指定命令並提交為新的映象。如果要執行多條run指令,通常會將多條run指令合成一條,並使用斜槓「\」 來換行,這樣將減少所構建的映象的體積。
4.cmd
cmd指令用於指定啟動容器時執行的命令,該指令有三種格式。語法格式如下:
cmd ["executable", "param1", "param2"] #使用exec執行,也是推薦方式;
cmd command param1 param2 #在/bin/sh中執行,提供給需要互動的應用;
cmd ["param1", "param2"] #提供給entrypoint的預設引數;
注意:在使用cmd指令時,每個dockerfile只能有一條cmd指令,如果有多條cmd指令,則只有最後一條生效。如果使用者啟動容器時指定了執行的指令,則會覆蓋掉cmd指定的指令。
5.expose
expose指令用於宣告容器內部暴露的埠號,供容器訪問連線使用。語法格式如下:
expose [...]
6.env
env指令用於為下文設定乙個環境變數,該變數值在後續指令或內聯檔案中都可以使用,env指令有兩種語法格式。語法格式如下:
env
env ,key>==...
7.add
add指令用於複製指定的src資源檔案到容器中的dest目錄下,複製的資源可以是檔案、目錄及遠端urls資源。語法格式如下:
add ...
在使用add指令時,複製的src資源檔案必須是當前上下文目錄或其子目錄,而複製的內容實際上是該目錄下的所有內容,其中包括檔案系統元資料,而目錄本身不會被複製。當dest目錄不存在時,會在複製檔案時自動建立。需注意的是,當使用add指令複製的檔案是乙個壓縮包時,add指令會在複製好該檔案後,自動進行解壓。
在使用add指令時,複製的src資源檔案路徑允許使用萬用字元,而dest目標目錄可以使用絕對路徑,也可以使用預先用workdir指令定義的相對路徑。
8.copy
copy指令的作用與add指令類似,都是複製指定的src資源檔案到容器中的dest目錄下。區別在於,copy指令不能複製遠端url路徑檔案,也不能解壓檔案,而add指令則可以。語法格式如下:
copy ...
9.entrypoint
entrypoint指令是配置容器啟動後執行的命令,每個dockerfile中只能有乙個entrypoint,當指定多個entrypoint指令時,只有最後乙個生效,該指令有兩種語法格式。語法格式如下:
entrypoint ["executable", "param1", "param2"] #exec格式,推薦的
entrypoint command param1 param2 #shell格式
10.workdir
workdir指令用於為後續的指令(如run,cmd,entrypoint,copy,add)指定工作目錄,在同乙個dockerfile檔案中可以多次使用workdir指令。語法格式如下:
workdir /path/to/workdir
dockerfile指令介紹
dockerfile指令 cmd,entrypoint,add,copy,volume,workdir,user,onbuild,env等 1.cmd 用於指定乙個容器啟動時要執行的命令。類似於run指令,只是run指令是指定映象被構建時的命令,而cmd是指容器被啟動時要執行的命令 docker r...
Dockerfile 基礎介紹
這是本專欄的第三部分 映象篇,共 8 篇。前兩篇我為你介紹了 docker 映象生命週期的管理,以及映象的構建和分發方式。本篇,我來為你介紹 dockerfile 帶你理解 dockerfile 中的重點知識,方便你自己定義構建映象的行為。下面我們一起進入本篇的學習。在前面的內容中,我有寫過幾個 d...
Dockerfile是什麼及基本語法(八)
1,什麼是dockerfile 2,dockerfile構建過程解析 3,dockerfile體系結構 關鍵字 重點啊 總結 1,dockerfile是用來構建docker映象的構建檔案,是由一系列的命令和引數構成的指令碼 2,dokcerfile的構建步驟 編寫dokcerfile檔案 docke...