人妖在线一区,国产日韩欧美一区二区综合在线,国产啪精品视频网站免费,欧美内射深插日本少妇

新聞動(dòng)態(tài)

使用Dockerfile構(gòu)建docker鏡像

發(fā)布日期:2021-12-21 22:32 | 文章來源:CSDN

今天我們看看Dockerfile創(chuàng)建的方法。

構(gòu)建docker鏡像,有兩種方法:

1、一種是使用docker commit命令

2、另外一種是基于docker build命令和dockerfile文件

通常情況下,dockerfile構(gòu)建鏡像比docker commit命令構(gòu)建 鏡像更加靈活,因此采用后者較多。

使用Dockerfile構(gòu)建docker鏡像

1、什么是Dockerfile?

dockerfile是一個(gè)文件,它是使用DSL語法編寫一個(gè)文件,之后使用docker build命令基于該dockerfile文件中的指令構(gòu)建一個(gè)新的鏡像。

假設(shè)我們的代碼是:

mkdir test
cd test
touch  Dockerfile

不難看出,我們創(chuàng)建了一個(gè)test目錄,并進(jìn)入目錄創(chuàng)建了dockerfile_test文件,這個(gè)目錄就稱之為我們的構(gòu)建環(huán)境,Docker將這個(gè)環(huán)境稱之為上下文(context)或者構(gòu)建上下文,Docker會在構(gòu)建鏡像的時(shí)候?qū)?gòu)建上下文和上下文中的文件和目錄上傳到Docker 守護(hù)進(jìn)程,這樣Docker守護(hù)進(jìn)程就能直接訪問你在鏡像中存儲的任何代碼、文件或者其他數(shù)據(jù)。

下面來看一個(gè)Docker file的內(nèi)容:

#version:0.0.1
FROMubuntu:14.04
MAINTAINERYeyz'yeyz@example.com'
RUNapt-getupdate
RUNapt-getinstall-ynginx
RUNecho'Hi,Iamyourcontainer'>/root/test.html
EXPOSE80

從上面的文件內(nèi)容中不難看出來,Dockerfile包含了一系列的命令,每個(gè)命令前面都需要用大寫的關(guān)鍵字來進(jìn)行標(biāo)識。以#開頭的內(nèi)容,會被識別為注釋。

Docker大體上按照下面的順序來執(zhí)行Dockerfile中的命令,

1、Docker從基礎(chǔ)鏡像運(yùn)行一個(gè)容器,每個(gè)DockerFile的第一個(gè)命令都應(yīng)該是From,F(xiàn)rom指定了一個(gè)基礎(chǔ)鏡像,后續(xù)指令都在這個(gè)基礎(chǔ)上執(zhí)行。

2、執(zhí)行一條指令,對容器作出修改

3、執(zhí)行類似docker commit的操作,提交一個(gè)新的鏡像層

4、Docker鏡像再基于剛才提交的鏡像運(yùn)行一個(gè)容器

5、執(zhí)行Dockerfile中的下一條指令,知道所有的容器指令都執(zhí)行完成

上面的過程中,任意一個(gè)步驟執(zhí)行失敗,都意味著目標(biāo)鏡像創(chuàng)建失敗,但是因?yàn)槟繕?biāo)鏡像是一個(gè)一個(gè)鏡像堆積的結(jié)果,其實(shí)我們得到了一個(gè)可以運(yùn)行的鏡像,只不過還沒有達(dá)到最終的鏡像的樣子,這個(gè)特性對于調(diào)試鏡像很重要。

我們對上面的鏡像進(jìn)行解釋:

Version:代表注釋,表示版本

From指令,F(xiàn)rom指定了一個(gè)基礎(chǔ)鏡像ubuntu,說明我們的操作是在ubuntu這個(gè)基礎(chǔ)鏡像上進(jìn)行的

Maintainer指令,這個(gè)指令代表的是鏡像的作者,以及作者的電子郵件地址

RUN指令,RUN指令會在當(dāng)前鏡像中運(yùn)行指定的命令,三條指令分別是更新apt倉庫,安裝nginx包,打印一條命令到指定的文件中。每條命令都會創(chuàng)建一個(gè)鏡像層。如果該命令成功,這個(gè)鏡像層就會提交,之后繼續(xù)指定DockerFile中的下面一條指令。默認(rèn)情況下,RUN命令會使用shell中的/bin/bash -c來執(zhí)行后面的指令。

Expose指令,這條指令告訴容器內(nèi)的應(yīng)用程序使用容器的指定端口。當(dāng)然,可以使用多個(gè)EXPOSE來向外面公開多個(gè)端口。

2、執(zhí)行一個(gè)Dockerfile,構(gòu)建鏡像

我們執(zhí)行剛才的Dockerfile,得到如下結(jié)果:

[roottest]#dockerbuild-t='yeyz:test0'.
SendingbuildcontexttoDockerdaemon2.048kB
Step1/6:FROMubuntu:14.04
Tryingtopullrepositorydocker.io/library/ubuntu...
14.04:Pullingfromdocker.io/library/ubuntu
2e6e20c8e2e6:Downloading[>]539.1kB/70.69MB
95201152d9ff:Downloadcomplete
5f63a3b65493:Downloadcomplete

其中,-t選項(xiàng)是用來指定鏡像和倉庫名稱的,yeyz為倉庫名字,而test0為鏡像名字。命令中的.代表了當(dāng)前目錄,Docker默認(rèn)從本地目錄中去尋找DockerFile,也可以替換成一個(gè)指定的Git倉庫源地址來指定DockerFile的位置。如下:

dockerbuild-t='yeyz/test0' xxxx.com:yeyz/test0

如果想要保留版本信息,可以指定一個(gè)標(biāo)簽,如下:

dockerbuild-t='yeyz/test0:v1'.

如果我們只想上傳某個(gè)目錄下面的部分文件,可以創(chuàng)建一個(gè).dockerignore的文件,每一行都是一個(gè)文件過濾匹配模式,這樣,在生成鏡像的時(shí)候,會自動(dòng)過濾掉那些不需要的文件。

最終的返回值是一個(gè)鏡像ID,我們拿到鏡像ID之后,就可以使用docker run命令運(yùn)行鏡像。

3、Dockerfile構(gòu)建緩存

當(dāng)我們第一次構(gòu)建的Dockerfile出現(xiàn)問題的時(shí)候,需要再次構(gòu)建,這個(gè)時(shí)候會執(zhí)行相同的指令,假設(shè)我們修改了Dockerfile中第4行的內(nèi)容,那么Docker會自動(dòng)將前3行通過緩存的方式來進(jìn)行加載,這會節(jié)省大量的時(shí)間。

如果我們不想使用Dockerfile的緩存,則可以通過加上--no-cache參數(shù)來避免使用Dockerfile緩存。

4、查看鏡像的構(gòu)建歷史

docker history可以查看構(gòu)建好的鏡像的構(gòu)建歷史,以及構(gòu)建好的鏡像的每一層。

[root@VM-16-13-centostest]#dockerimagesmysql
REPOSITORYTAGIMAGEIDCREATEDSIZE
docker.io/mysqllatest4f14134203607weeksago545MB
[root@VM-16-13-centostest]#dockerhistory4f1413420360
IMAGECREATEDCREATEDBYSIZECOMMENT
4f14134203607weeksago/bin/sh-c#(nop)CMD["mysqld"]0B
<missing>7weeksago/bin/sh-c#(nop)EXPOSE3306330600B
<missing>7weeksago/bin/sh-c#(nop)ENTRYPOINT["docker-ent...0B
<missing>7weeksago/bin/sh-cln-susr/local/bin/docker-entr...34B
<missing>7weeksago/bin/sh-c#(nop)COPYfile:f9202f6b715c0e...13.1kB
<missing>7weeksago/bin/sh-c#(nop)COPYdir:2e040acc386ebd2...1.12kB
<missing>7weeksago/bin/sh-c#(nop)VOLUME[/var/lib/mysql]0B
<missing>7weeksago/bin/sh-c{echomysql-community-server...410MB
<missing>7weeksago/bin/sh-cecho"debhttp://repo.mysql.com...55B
<missing>7weeksago/bin/sh-c#(nop)ENVMYSQL_VERSION=8.0.2...0B
<missing>7weeksago/bin/sh-c#(nop)ENVMYSQL_MAJOR=8.00B
<missing>7weeksago/bin/sh-cset-ex;key='A4A9406876FCBD3C...2.61kB
<missing>7weeksago/bin/sh-capt-getupdate&&apt-getinsta...52.2MB
<missing>7weeksago/bin/sh-cmkdir/docker-entrypoint-initdb.d0B
<missing>7weeksago/bin/sh-cset-eux;savedAptMark="$(apt-...4.17MB
<missing>7weeksago/bin/sh-c#(nop)ENVGOSU_VERSION=1.120B
<missing>7weeksago/bin/sh-capt-getupdate&&apt-getinsta...9.34MB
<missing>7weeksago/bin/sh-cgroupadd-rmysql&&useradd-r...329kB
<missing>7weeksago/bin/sh-c#(nop)CMD["bash"]0B
<missing>7weeksago/bin/sh-c#(nop)ADDfile:d2abb0e4e7ac177...69.2MB

以上就是使用Dockerfile構(gòu)建docker鏡像的詳細(xì)內(nèi)容,更多關(guān)于用Dockerfile構(gòu)建docker鏡像的資料請關(guān)注本站其它相關(guān)文章!

版權(quán)聲明:本站文章來源標(biāo)注為YINGSOO的內(nèi)容版權(quán)均為本站所有,歡迎引用、轉(zhuǎn)載,請保持原文完整并注明來源及原文鏈接。禁止復(fù)制或仿造本網(wǎng)站,禁止在非www.sddonglingsh.com所屬的服務(wù)器上建立鏡像,否則將依法追究法律責(zé)任。本站部分內(nèi)容來源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來,僅供學(xué)習(xí)參考,不代表本站立場,如有內(nèi)容涉嫌侵權(quán),請聯(lián)系alex-e#qq.com處理。

實(shí)時(shí)開通

自選配置、實(shí)時(shí)開通

免備案

全球線路精選!

全天候客戶服務(wù)

7x24全年不間斷在線

專屬顧問服務(wù)

1對1客戶咨詢顧問

在線
客服

在線客服:7*24小時(shí)在線

客服
熱線

400-630-3752
7*24小時(shí)客服服務(wù)熱線

關(guān)注
微信

關(guān)注官方微信
頂部