Dockerfile的簡單介紹

2021-09-23 19:13:21 字數 3439 閱讀 3562

dockerfile是docker打包映象時使用的說明檔案,類似於構建rpm包的spec檔案。裡面由一些指令和配置構成。本文將一些dockerfile的編寫。其實我們可以把它看成就是spec的乙個擴充套件版。

總的語法也和spec很像,以這樣的語句來表示。支援#注釋

1命令 引數

這是個很簡單的dockerfile。

1#指定父映象

2from fedora

3#作者資訊

4maintainer kryptosx

5#安裝命令

6run yuminstall-y memcached

7#啟動命令

8entrypoint ["memcached"]

裡面定義了一些基礎資訊,安裝的命令,以及最後啟動的命令。下面將根據這些分類來講解每個命令的用途。

這是映象的基礎資訊。

docker的構建需要指定乙個父映象,這通過from指定。這表明映象將以指定的父映象為基礎構建。

1from ubuntu

寫**要留名。

1maintainer kryptosx

在製作映象時,docker會先使用上面的父映象建立乙個容器。然後,在容器內,我們就需要做該做的事情了。將需要安裝的程式放置到它應該在的地方。

這裡不同於rpm,rpm的spec定義的是安裝時執行的命令。也就是安裝的這個命令是在軟體部署(yum install ***)時執行的。docker則是在打包時把安裝的各種檔案放到相應路徑(docker內的路徑)。

1run <command> (thecommandis runina shell - `/bin/sh-c`)

2run ["executable","param1","param2"... ]  (execform)

不同的語法略有差異。比如第一句,直接接命令列。docker會新增/bin/sh -c到命令前執行,可能會出現某些bash解析問題。下面這個類似函式穿參的做法,用過exec這類函式的同學應該明白。

在例子中,就用了yum直接安裝了memchache。這應該是最簡單的移植方式。

這是將外部檔案複製到映象中的指令。

1add

2#是相對被構建的源目錄的相對路徑,可以是檔案或目錄的路徑,也可以是乙個遠端的檔案url;

3#是容器中的絕對路徑

這是容器啟動時的相關命令。

指定容器啟動時執行的命令,字面意思是進入點。

1#這和run的語法一樣。

2entrypoint ["executable", "param1", "param2"] (like an exec, the preferred form)

3ntrypoint command param1 param2 (as a shell)

注意:可以多次設定,但是只有最後乙個有效。

如果使用第一種語法,在run的時候,傳入的引數會接在後面。

1#例子

2entrypoint ["/bin/cat","hello"]

1docker run fedora world

2#輸出"hello world"

cmd用於容器啟動時指定的操作。該操作可以是執行自定義指令碼,也可以是執行系統命令。

注意:該指令只能在檔案中存在一次,如果有多個,則只執行最後一條。

cmd的語法和run,entrypoint一樣。但有時候意義不同。

大多數人會直接將其用作命令執行。這種情況下,如果entrypoint也存在,那麼就看二者相互覆蓋。

1cmdcommandparam1 param2 (as a shell)

1cmd ["executable","param1","param2"] (like an exec, this is the preferred form)

上面的這個表示,在沒有entrypoint時,也是作為命令執行,但當entrypoint存在,是exec的表示時,它就會作為引數。

1#作為引數

2cmd ["param1","param2"] (as default parameters to entrypoint)

特別注意:cmd會被run命令最後帶的引數給覆蓋掉。

所以,可以讓entrypoint指定程式,然後cmd中放入預設引數。

可以指定執行的使用者,預設root。

現在不少使用docker的運維系統都是使用環境變數來傳遞一些集群相關的引數。我們也可以將某些預設配置放到這裡。

1env

以上就是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...