Docker-7-Dockerfile的簡單使用

上文中,我們使用commit的方式創(chuàng)建了一個本地的鏡像,但是commit方式存在一些問題,比如不夠透明化,無法重復(fù),體積較大,為了解決這些問題,可以使用Dockerfile

Dockerfile是一個文本文件,其內(nèi)包含了一條條的指令(Instruction),每一條指令構(gòu)建一層,因此每一條指令的內(nèi)容,就是描述該層應(yīng)當(dāng)如何構(gòu)建.

書寫規(guī)則

Dockerfile的指令是忽略大小寫的,建議使用大寫,使用#作為注釋,每一行只支持一條指令,每條指令可以攜帶多個參數(shù)

示例

先來看一個簡單的例子,首先找個空白目錄創(chuàng)建一個名為Dockerfile的文件,命令如下:

touch Dockerfile

編輯文件內(nèi)容,如下:

FROM nginx
MAINTAINER zhou "xxx@sina.com"
RUN echo 'hello docker!'>/usr/share/nginx/html/index.html

在這個Dockerfile中一共就三行,用到了三個指令,FROM,MAINTAINERRUN

命令詳解

FROM

指定鏡像,這里表示已nginx為基礎(chǔ),在該鏡像的基礎(chǔ)上構(gòu)建

MAINTAINER

表示鏡像作者的信息,這命令可以不寫

RUN

RUN指令用來修改鏡像,算是使用比較頻繁的一個指令了,該指令可以用來安裝程序、安裝庫以及配置應(yīng)用程序等.

一個RUN指令執(zhí)行會在當(dāng)前鏡像的基礎(chǔ)上創(chuàng)建一個新的鏡像層,接下來的指令將在這個新的鏡像層上執(zhí)行.這里要注意,不要寫很多個RUN,否則會建立很多層,Union FS是有最大層數(shù)限制的,比如AUFS,曾經(jīng)是最大不得超過42層,現(xiàn)在是不得超過 127 層.

可以使用&&將各個所需執(zhí)行的命令串聯(lián)起來,而且Dockerfile 支持 Shell 類的行尾添加 \ 的命令換行方式

RUN語句有兩種不同的形式:shell格式和exec格式,本案例采用的shell格式,shell格式就像linux命令一樣,exec格式則是一個JSON數(shù)組,將命令放到數(shù)組中即可

構(gòu)建鏡像

在剛剛創(chuàng)建的Dockerfile的目錄下執(zhí)行下面的命令去構(gòu)建鏡像:

docker build -t zhou/nginx:v3 .

執(zhí)行結(jié)果如下:

image

從輸出結(jié)果中,就能清晰的看到鏡像的構(gòu)建過程. 構(gòu)建完成之后就可以用這個鏡像去運行容器了.

這里構(gòu)建命令的-t參數(shù),用來指定鏡像的命名空間,倉庫名以及TAG等信息

命令最后有一個.,指的是鏡像構(gòu)建上下文
官方的描述是這樣的:

Docker采用了C/S架構(gòu),分為Docker客戶端(Docker可執(zhí)行程序)與Docker守護進程,Docker客戶端
通過命令行和API的形式與Docker守護進程進行通信,Docker守護進程則提供Docker服務(wù)。因此,我
們操作的各種docker命令實際上都是由docker?客戶端發(fā)送到docker守護進程上去執(zhí)行。我們在構(gòu)建
一個鏡像時,不可避免的需要將一些本地文件拷貝到鏡像中,例如上文提到的COPY命令,用戶在構(gòu)建
鏡像時,需要指定構(gòu)建鏡像的上下文路徑(即前文的.),docker build在獲得這個路徑之后,會將路
徑下的所有內(nèi)容打包,然后上傳給Docker引擎。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容