日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Dockerfile 简版大全,附赠编写实例

發(fā)布時(shí)間:2025/7/25 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Dockerfile 简版大全,附赠编写实例 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

基礎(chǔ)鏡像可以用于創(chuàng)建Docker容器。鏡像可以非?;A(chǔ),僅僅包含操作系統(tǒng);也可以非常豐富,包含靈巧的應(yīng)用棧,隨時(shí)可以發(fā)布。當(dāng)你在使用Docker構(gòu)建鏡像的時(shí)候,每一個(gè)命令都會(huì)在前一個(gè)命令的基礎(chǔ)上形成一個(gè)新層。這些基礎(chǔ)鏡像可以用于創(chuàng)建新的容器。本篇文章將手把手教您如何從基礎(chǔ)鏡像,一步一步,一層一層的從Dockerfile構(gòu)建容器的過程。

?

Docker簡介

Docker項(xiàng)目提供了構(gòu)建在Linux內(nèi)核功能之上,協(xié)同在一起的的高級工具。其目標(biāo)是幫助開發(fā)和運(yùn)維人員更容易地跨系統(tǒng)跨主機(jī)交付應(yīng)用程序和他們的依賴。Docker通過Docker容器,一個(gè)安全的,基于輕量級容器的環(huán)境,來實(shí)現(xiàn)這個(gè)目標(biāo)。這些容器由鏡像創(chuàng)建,而鏡像可以通過命令行手工創(chuàng)建或者通過Dockerfile自動(dòng)創(chuàng)建。

Dockerfiles

Dockerfiles是由一系列命令和參數(shù)構(gòu)成的腳本,這些命令應(yīng)用于基礎(chǔ)鏡像并最終創(chuàng)建一個(gè)新的鏡像。它們簡化了從頭到尾的流程并極大的簡化了部署工作。Dockerfile從FROM命令開始,緊接著跟隨者各種方法,命令和參數(shù)。其產(chǎn)出為一個(gè)新的可以用于創(chuàng)建容器的鏡像。

?

Dockerfile 語法

在我們深入討論Dockerfile之前,讓我們快速過一下Dockerfile的語法和它們的意義。

什么是語法?

非常簡單,在編程中,語法意味著一個(gè)調(diào)用命令,輸入?yún)?shù)去讓應(yīng)用執(zhí)行程序的文法結(jié)構(gòu)。這些語法被規(guī)則或明或暗的約束。程序員遵循語法規(guī)范以和計(jì)算機(jī)交互。如果一段程序語法不正確,計(jì)算機(jī)將無法識別。Dockerfile使用簡單的,清楚的和干凈的語法結(jié)構(gòu),極為易于使用。這些語法可以自我釋義,支持注釋。

Dockerfile 語法示例

Dockerfile語法由兩部分構(gòu)成,注釋和命令+參數(shù)

#?Line?blocks?used?for?commenting command?argument?argument?..


一個(gè)簡單的例子:

#?Print?"Hello?docker!" RUN?echo?"Hello?docker!"


Dockerfile 命令

?

Dockerfile有十幾條命令可用于構(gòu)建鏡像,下文將簡略介紹這些命令。

?

ADD

ADD命令有兩個(gè)參數(shù),源和目標(biāo)。它的基本作用是從源系統(tǒng)的文件系統(tǒng)上復(fù)制文件到目標(biāo)容器的文件系統(tǒng)。如果源是一個(gè)URL,那該URL的內(nèi)容將被下載并復(fù)制到容器中。

#?Usage:?ADD?[source?directory?or?URL]?[destination?directory] ADD?/my_app_folder?/my_app_folder


CMD

和RUN命令相似,CMD可以用于執(zhí)行特定的命令。和RUN不同的是,這些命令不是在鏡像構(gòu)建的過程中執(zhí)行的,而是在用鏡像構(gòu)建容器后被調(diào)用。

#?Usage?1:?CMD?application?"argument",?"argument",?.. CMD?"echo"?"Hello?docker!"

?

ENTRYPOINT

ENTRYPOINT 幫助你配置一個(gè)容器使之可執(zhí)行化,如果你結(jié)合CMD命令和ENTRYPOINT命令,你可以從CMD命令中移除“application”而僅僅保留參數(shù),參數(shù)將傳遞給ENTRYPOINT命令,

#?Usage:?ENTRYPOINT?application?"argument",?"argument",?.. #?Remember:?arguments?are?optional.?They?can?be?provided?by?CMD #?or?during?the?creation?of?a?container.? ENTRYPOINT?echo #?Usage?example?with?CMD: #?Arguments?set?with?CMD?can?be?overridden?during?*run* CMD?"Hello?docker!" ENTRYPOINT?echo


ENV

ENV命令用于設(shè)置環(huán)境變量。這些變量以”key=value”的形式存在,并可以在容器內(nèi)被腳本或者程序調(diào)用。這個(gè)機(jī)制給在容器中運(yùn)行應(yīng)用帶來了極大的便利。

#?Usage:?ENV?key?value ENV?SERVER_WORKS?4

?

EXPOSE

EXPOSE用來指定端口,使容器內(nèi)的應(yīng)用可以通過端口和外界交互。

#?Usage:?EXPOSE?[port] EXPOSE?8080


FROM

FROM命令可能是最重要的Dockerfile命令。改命令定義了使用哪個(gè)基礎(chǔ)鏡像啟動(dòng)構(gòu)建流程。基礎(chǔ)鏡像可以為任意鏡像。如果基礎(chǔ)鏡像沒有被發(fā)現(xiàn),Docker將試圖從Docker image index來查找該鏡像。FROM命令必須是Dockerfile的首個(gè)命令。

#?Usage:?FROM?[image?name] FROM?ubuntu


MAINTAINER

我建議這個(gè)命令放在Dockerfile的起始部分,雖然理論上它可以放置于Dockerfile的任意位置。這個(gè)命令用于聲明作者,并應(yīng)該放在FROM的后面。

#?Usage:?MAINTAINER?[name] MAINTAINER?authors_name

?

RUN

RUN命令是Dockerfile執(zhí)行命令的核心部分。它接受命令作為參數(shù)并用于創(chuàng)建鏡像。不像CMD命令,RUN命令用于創(chuàng)建鏡像(在之前commit的層之上形成新的層)。

#?Usage:?RUN?[command] RUN?aptitude?install?-y?riak

?

USER

USER命令用于設(shè)置運(yùn)行容器的UID。

#?Usage:?USER?[UID] USER?751

?

VOLUME

VOLUME命令用于讓你的容器訪問宿主機(jī)上的目錄。

#?Usage:?VOLUME?["/dir_1",?"/dir_2"?..] VOLUME?["/my_files"]


WORKDIR

WORKDIR命令用于設(shè)置CMD指明的命令的運(yùn)行目錄。

#?Usage:?WORKDIR?/path WORKDIR?~/

如何使用Dockerfiles

使用Dockerfiles和手工使用Docker Daemon運(yùn)行命令一樣簡單。腳本運(yùn)行后輸出為新的鏡像ID

#?Build?an?image?using?the?Dockerfile?at?current?location #?Example:?sudo?docker?build?-t?[name]?. sudo?docker?build?-t?my_mongodb?.


Dockerfile 示例一:創(chuàng)建一個(gè)MongoDB的鏡像

在這部分中,我們講一步一步創(chuàng)建一個(gè)Dockfile,這個(gè)Dockerfile可用于構(gòu)建MongoDB鏡像進(jìn)而構(gòu)建MongoDB容器。

?

創(chuàng)建一個(gè)Dockerfile

使用nano文本編輯器,讓我們創(chuàng)建Dockerfile

sudo?nano?Dockerfile

?

定義文件和它的目的

讓閱讀者明確Dockerfile的目的永遠(yuǎn)是必要的。為此,我們通常從注釋開始寫Dockerfile。

############################################################ #?Dockerfile?to?build?MongoDB?container?images #?Based?on?Ubuntu ############################################################

?

設(shè)置基礎(chǔ)鏡像

#?Set?the?base?image?to?Ubuntu FROM?ubuntu


定義作者

#?File?Author?/?Maintainer MAINTAINER?Example?McAuthor


設(shè)置命令與參數(shù)下載MongoDB

##################?BEGIN?INSTALLATION?###################### #?Install?MongoDB?Following?the?Instructions?at?MongoDB?Docs #?Ref:?http://docs.mongodb.org/manual/tutorial/install-mongodb-on-ubuntu/ #?Add?the?package?verification?key RUN?apt-key?adv?--keyserver?hkp://keyserver.ubuntu.com:80?--recv?7F0CEB10 #?Add?MongoDB?to?the?repository?sources?list RUN?echo?'deb?http://downloads-distro.mongodb.org/repo/ubuntu-upstart?dist?10gen'?|?tee?/etc/apt/sources.list.d/mongodb.list #?Update?the?repository?sources?list?once?more RUN?apt-get?update #?Install?MongoDB?package?(.deb) RUN?apt-get?install?-y?mongodb-10gen #?Create?the?default?data?directory RUN?mkdir?-p?/data/db #####################?INSTALLATION?END?#####################


設(shè)置MongoDB端口

#?Expose?the?default?port EXPOSE?27017 #?Default?port?to?execute?the?entrypoint?(MongoDB) CMD?["--port?27017"] #?Set?default?container?command</span> ENTRYPOINT?usr/bin/mongod


保存Dockerfile,下面的代碼是Dockerfile的完整版本

############################################################ #?Dockerfile?to?build?MongoDB?container?images #?Based?on?Ubuntu ############################################################ #?Set?the?base?image?to?Ubuntu FROM?ubuntu #?File?Author?/?Maintainer MAINTAINER?Example?McAuthor #?Update?the?repository?sources?list RUN?apt-get?update ##################?BEGIN?INSTALLATION?###################### #?Install?MongoDB?Following?the?Instructions?at?MongoDB?Docs #?Ref:?http://docs.mongodb.org/manual/tutorial/install-mongodb-on-ubuntu/ #?Add?the?package?verification?key RUN?apt-key?adv?--keyserver?hkp://keyserver.ubuntu.com:80?--recv?7F0CEB10 #?Add?MongoDB?to?the?repository?sources?list RUN?echo?'deb?http://downloads-distro.mongodb.org/repo/ubuntu-upstart?dist?10gen'?|?tee?/etc/apt/sources.list.d/mongodb.list #?Update?the?repository?sources?list?once?more RUN?apt-get?update #?Install?MongoDB?package?(.deb) RUN?apt-get?install?-y?mongodb-10gen #?Create?the?default?data?directory RUN?mkdir?-p?/data/db #####################?INSTALLATION?END?##################### #?Expose?the?default?port EXPOSE?27017 #?Default?port?to?execute?the?entrypoint?(MongoDB) CMD?["--port?27017"] #?Set?default?container?command ENTRYPOINT?usr/bin/mongod


構(gòu)建鏡像

使用上述的Dockerfile,我們已經(jīng)可以開始構(gòu)建MongoDB鏡像

sudo?docker?build?-t?my_mongodb?.


Dockerfile 示例二:創(chuàng)建一個(gè)Nginx的鏡像

Nginx簡述

Nginx是一個(gè)高性能的 HTTP 和 反向代理 服務(wù)器。它因?yàn)樗妮p量級,易用,易于擴(kuò)展而流行于業(yè)界。基于優(yōu)良的架構(gòu)設(shè)計(jì),它能夠比之前的類似軟件處理更多的請求。它也可以用來提供靜態(tài)文件服務(wù),比如圖片,腳本和CSS。

和上個(gè)例子一樣,我們還是從基礎(chǔ)鏡像開始,運(yùn)用FROM命令和MAINTAINER命令

############################################################ #?Dockerfile?to?build?Nginx?Installed?Containers #?Based?on?Ubuntu ############################################################ #?Set?the?base?image?to?Ubuntu FROM?ubuntu #?File?Author?/?Maintainer MAINTAINER?Maintaner?Name

?

安裝Nginx

#?Install?Nginx #?Add?application?repository?URL?to?the?default?sources RUN?echo?"deb?http://archive.ubuntu.com/ubuntu/?raring?main?universe"?>>?/etc/apt/sources.list #?Update?the?repository RUN?apt-get?update #?Install?necessary?tools RUN?apt-get?install?-y?nano?wget?dialog?net-tools #?Download?and?Install?Nginx RUN?apt-get?install?-y?nginx


Bootstrapping

安裝Nginx后,我們需要配置Nginx并且替換掉默認(rèn)的配置文件

#?Remove?the?default?Nginx?configuration?file RUN?rm?-v?/etc/nginx/nginx.conf #?Copy?a?configuration?file?from?the?current?directory ADD?nginx.conf?/etc/nginx/ #?Append?"daemon?off;"?to?the?beginning?of?the?configuration RUN?echo?"daemon?off;"?>>?/etc/nginx/nginx.conf #?Expose?ports EXPOSE?80 #?Set?the?default?command?to?execute #?when?creating?a?new?container CMD?service?nginx?start


最后的Dockerfile

############################################################ #?Dockerfile?to?build?Nginx?Installed?Containers #?Based?on?Ubuntu ############################################################ #?Set?the?base?image?to?Ubuntu FROM?ubuntu #?File?Author?/?Maintainer MAINTAINER?Maintaner?Name #?Install?Nginx #?Add?application?repository?URL?to?the?default?sources RUN?echo?"deb?http://archive.ubuntu.com/ubuntu/?raring?main?universe"?>>?/etc/apt/sources.list #?Update?the?repository RUN?apt-get?update #?Install?necessary?tools RUN?apt-get?install?-y?nano?wget?dialog?net-tools #?Download?and?Install?Nginx RUN?apt-get?install?-y?nginx #?Remove?the?default?Nginx?configuration?file RUN?rm?-v?/etc/nginx/nginx.conf #?Copy?a?configuration?file?from?the?current?directory ADD?nginx.conf?/etc/nginx/ #?Append?"daemon?off;"?to?the?beginning?of?the?configuration RUN?echo?"daemon?off;"?>>?/etc/nginx/nginx.conf #?Expose?ports EXPOSE?80 #?Set?the?default?command?to?execute #?when?creating?a?new?container CMD?service?nginx?start


使用Dockerfile自動(dòng)構(gòu)建Nginx容器

因?yàn)槲覀兠頓ocker用當(dāng)前目錄的Nginx的配置文件替換默認(rèn)的配置文件,我們要保證這個(gè)新的配置文件存在。在Dockerfile存在的目錄下,創(chuàng)建nginx.conf:

sudo?nano?nginx.conf


然后用下述內(nèi)容替換原有內(nèi)容:

worker_processes?1; events?{?worker_connections?1024;?} http?{sendfile?on;server?{listen?80;location?/?{proxy_pass?http://httpstat.us/;proxy_set_header?X-Real-IP?$remote_addr;}} }


讓我們保存nginx.conf。之后我們就可以用Dockerfile和配置文件來構(gòu)建鏡像。

Via:digitalocean

本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或編譯。歡迎任何形式的轉(zhuǎn)載,但請務(wù)必注明出處,尊重他人勞動(dòng)共創(chuàng)開源社區(qū)。 轉(zhuǎn)載請注明:文章轉(zhuǎn)載自 開源中國社區(qū) [http://www.oschina.net] 本文標(biāo)題:Dockerfile 簡版大全,附贈(zèng)編寫實(shí)例 本文地址:https://www.oschina.net/news/64396/dockerfile-instructions
《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀

總結(jié)

以上是生活随笔為你收集整理的Dockerfile 简版大全,附赠编写实例的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。