dockerfile是docker打包映象時使用的說明檔案,類似於構建rpm包的spec檔案。裡面由一些指令和配置構成。本文將一些dockerfile的編寫。其實我們可以把它看成就是spec的乙個擴充套件版。
總的語法也和spec很像,以這樣的語句來表示。支援#注釋。
1
命令 引數
這是個很簡單的dockerfile。
1
#指定父映象
2
from fedora
3
#作者資訊
4
maintainer kryptosx
5
#安裝命令
6
run yum
install
-y memcached
7
#啟動命令
8
entrypoint [
"memcached"
]
裡面定義了一些基礎資訊,安裝的命令,以及最後啟動的命令。下面將根據這些分類來講解每個命令的用途。
這是映象的基礎資訊。
docker的構建需要指定乙個父映象,這通過from指定。這表明映象將以指定的父映象為基礎構建。
1
from ubuntu
寫**要留名。
1
maintainer kryptosx
在製作映象時,docker會先使用上面的父映象建立乙個容器。然後,在容器內,我們就需要做該做的事情了。將需要安裝的程式放置到它應該在的地方。
這裡不同於rpm,rpm的spec定義的是安裝時執行的命令。也就是安裝的這個命令是在軟體部署(yum install ***)時執行的。docker則是在打包時把安裝的各種檔案放到相應路徑(docker內的路徑)。
1
run <
command
> (the
command
is run
in
a shell - `
/bin/sh
-c`)
2
run [
"executable"
,
"param1"
,
"param2"
... ] (
exec
form)
不同的語法略有差異。比如第一句,直接接命令列。docker會新增/bin/sh -c到命令前執行,可能會出現某些bash解析問題。下面這個類似函式穿參的做法,用過exec這類函式的同學應該明白。
在例子中,就用了yum直接安裝了memchache。這應該是最簡單的移植方式。
這是將外部檔案複製到映象中的指令。
1
add
2
#是相對被構建的源目錄的相對路徑,可以是檔案或目錄的路徑,也可以是乙個遠端的檔案url;
3
#是容器中的絕對路徑
這是容器啟動時的相關命令。
指定容器啟動時執行的命令,字面意思是進入點。
1
#這和run的語法一樣。
2
entrypoint ["executable", "param1", "param2"] (like an exec, the preferred form)
3
ntrypoint command param1 param2 (as a shell)
注意:可以多次設定,但是只有最後乙個有效。
如果使用第一種語法,在run的時候,傳入的引數會接在後面。
1
#例子
2
entrypoint [
"/bin/cat"
,
"hello"
]
1
docker run fedora world
2
#輸出"hello world"
cmd用於容器啟動時指定的操作。該操作可以是執行自定義指令碼,也可以是執行系統命令。
注意:該指令只能在檔案中存在一次,如果有多個,則只執行最後一條。
cmd的語法和run,entrypoint一樣。但有時候意義不同。
大多數人會直接將其用作命令執行。這種情況下,如果entrypoint也存在,那麼就看二者相互覆蓋。
1
cmd
command
param1 param2 (as a shell)
1
cmd ["executable","param1","param2"] (like an exec, this is the preferred form)
上面的這個表示,在沒有entrypoint時,也是作為命令執行,但當entrypoint存在,是exec的表示時,它就會作為引數。
1
#作為引數
2
cmd [
"param1"
,
"param2"
] (as default parameters to entrypoint)
特別注意:cmd會被run命令最後帶的引數給覆蓋掉。
所以,可以讓entrypoint指定程式,然後cmd中放入預設引數。
可以指定執行的使用者,預設root。
現在不少使用docker的運維系統都是使用環境變數來傳遞一些集群相關的引數。我們也可以將某些預設配置放到這裡。
1
env
以上就是dockerfile的簡單語法。應該足以用作普通的部署。我覺得如果dockerfile弄得很複雜,那用docker的那種方便從**來呢。
Dockerfile的使用介紹
首先通過一張圖來了解 docker 映象 容器和 dockerfile 三者之間的關係。通過上圖可以看出使用 dockerfile 定義映象,執行映象啟動容器。docker 映象是乙個特殊的檔案系統,除了提供容器執行時所需的程式 庫 資源 配置等檔案外,還包含了一些為執行時準備的一些配置引數 如匿名...
dockerfile指令介紹
dockerfile指令 cmd,entrypoint,add,copy,volume,workdir,user,onbuild,env等 1.cmd 用於指定乙個容器啟動時要執行的命令。類似於run指令,只是run指令是指定映象被構建時的命令,而cmd是指容器被啟動時要執行的命令 docker r...
Dockerfile 基礎介紹
這是本專欄的第三部分 映象篇,共 8 篇。前兩篇我為你介紹了 docker 映象生命週期的管理,以及映象的構建和分發方式。本篇,我來為你介紹 dockerfile 帶你理解 dockerfile 中的重點知識,方便你自己定義構建映象的行為。下面我們一起進入本篇的學習。在前面的內容中,我有寫過幾個 d...