国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

目錄
關(guān)鍵要點(diǎn)
為什么選擇Docker
安裝Docker
Dockerfile
選擇基礎(chǔ)鏡像
指定維護(hù)者并添加元數(shù)據(jù)
創(chuàng)建您自己的發(fā)行版
處理緩存問題
安裝基本工具
安裝應(yīng)用程序的運(yùn)行時庫
編譯和下載包
清理
交付您自己的應(yīng)用程序
設(shè)置您的環(huán)境
完整的Dockerfile
構(gòu)建鏡像
列出鏡像
啟動容器
后續(xù)步驟
關(guān)于如何使用Dockerfile構(gòu)建鏡像的常見問題解答
使用Dockerfile構(gòu)建Docker鏡像的重要性是什么?
如何使用Dockerfile優(yōu)化構(gòu)建過程?
編寫Dockerfile的最佳實(shí)踐是什么?
如何調(diào)試Dockerfile?
我可以在Dockerfile中使用環(huán)境變量嗎?
如何將文件從主機(jī)復(fù)制到Docker鏡像?
如何在Docker鏡像中公開端口?
如何在Docker鏡像中設(shè)置工作目錄?
如何在Docker鏡像中運(yùn)行命令?
如何為Docker鏡像指定默認(rèn)命令?
首頁 科技周邊 IT業(yè)界 如何使用Dockerfile構(gòu)建圖像

如何使用Dockerfile構(gòu)建圖像

Feb 18, 2025 pm 12:36 PM

How to Build an Image with the Dockerfile

從構(gòu)建應(yīng)用、安裝依賴項(xiàng)和服務(wù),到自動化部署等等——一切始于Dockerfile。讓我們回顧一下Dockerfile的語法,從基礎(chǔ)到復(fù)雜,以及構(gòu)建Docker鏡像時的一些最佳實(shí)踐。

本指南將編寫一個Dockerfile,指導(dǎo)Docker為我們將交付的應(yīng)用程序選擇一個最小化的Linux(基礎(chǔ)鏡像),并附帶我們選擇的工具集和特定配置,有效地構(gòu)建我們自己的Linux發(fā)行版,該發(fā)行版恰好適合運(yùn)行我們的應(yīng)用程序。

How to Build an Image with the Dockerfile

關(guān)鍵要點(diǎn)

  • Docker通過將應(yīng)用程序與其所有必要的二進(jìn)制文件、運(yùn)行時庫、后端工具、操作系統(tǒng)調(diào)整和服務(wù)打包在一起,使用戶能夠“構(gòu)建、交付和運(yùn)行任何應(yīng)用程序,無論在何處”,從而使它們能夠立即交付和自動部署。
  • Dockerfile是一個純文本文件,其中包含在Docker中構(gòu)建鏡像的指令,它是構(gòu)建應(yīng)用程序、安裝依賴項(xiàng)和服務(wù)以及自動化部署的起點(diǎn)。Dockerfile的語法類似于Apache配置文件的語法,并且一條指令接一條指令地進(jìn)行處理。
  • Dockerfile指示Docker為要交付的應(yīng)用程序選擇一個基礎(chǔ)鏡像(例如,最小化的Linux),并附帶一組選擇的工具和特定配置,從而有效地創(chuàng)建適合運(yùn)行應(yīng)用程序的自定義Linux發(fā)行版。
  • Dockerfile允許選擇和安裝特定的工具和庫、設(shè)置環(huán)境變量、添加文件和目錄以及處理緩存問題等等,以確保容器擁有所需的一切。
  • Docker build命令用于根據(jù)Dockerfile中的指令構(gòu)建鏡像,而docker run命令用于啟動已創(chuàng)建鏡像的交互式終端。

為什么選擇Docker

How to Build an Image with the Dockerfile

使用Docker,您可以“構(gòu)建、交付和運(yùn)行任何應(yīng)用程序,無論在何處”。也就是說,您可以將您的應(yīng)用程序與所有二進(jìn)制文件和運(yùn)行時庫、后端工具、操作系統(tǒng)調(diào)整甚至應(yīng)用程序運(yùn)行所需的特定服務(wù)打包在一起——并使其能夠立即交付和自動部署。

Docker實(shí)現(xiàn)的軟件容器技術(shù)使這一切成為可能。盡管我在這里不會詳細(xì)介紹其背后的細(xì)節(jié),但您可以在《理解Docker、容器和更安全的軟件交付》中閱讀更多關(guān)于Docker、軟件容器是什么以及它們?nèi)绾喂ぷ鞯男畔ⅰ?/p>

安裝Docker

在開始之前,您需要安裝Docker,無論是在本地機(jī)器上還是在遠(yuǎn)程服務(wù)器上。

幸運(yùn)的是,最新版本的Docker(截至撰寫本文時為1.12版)使安裝過程非常流暢,并且您可以獲得針對Windows、MacOS和Linux的簡單易懂的指南。

Dockerfile

為了在Docker中構(gòu)建鏡像,您首先需要在一個名為Dockerfile的純文本文件中設(shè)置此構(gòu)建的指令和上下文(稍后將詳細(xì)介紹)。此文件具有類似于Apache配置文件的語法——每行一條指令及其相應(yīng)的參數(shù),所有指令都按順序依次處理。注釋以#字符和空格開頭。最后,一旦您有了Dockerfile,命令docker build將構(gòu)建鏡像,我們稍后將更詳細(xì)地介紹。

在我們開始編寫Dockerfile之前,我們將設(shè)置工作區(qū)。我們將在主目錄中創(chuàng)建一個名為my_image的目錄,將其用作我們的工作目錄,并將Dockerfile放在其中:

mkdir ~/my_build
cd ~/my_build
touch Dockerfile

現(xiàn)在我們準(zhǔn)備開始構(gòu)建鏡像了。

選擇基礎(chǔ)鏡像

在創(chuàng)建鏡像時,大多數(shù)情況下,您將使用一個起點(diǎn)——即另一個鏡像。這可以是Docker Hub中提供的官方Ubuntu、MySQL、WordPress或任何其他鏡像。您也可以使用之前自己創(chuàng)建的鏡像。

注意:您可以使用Docker的保留的最小鏡像(稱為scratch)創(chuàng)建自己的基礎(chǔ)鏡像,其中包含您自己的核心工具和目錄結(jié)構(gòu)。我不會在此處介紹此過程,但您可以參考Docker網(wǎng)站上關(guān)于創(chuàng)建基礎(chǔ)鏡像的指南。

例如,如果您想從最小化的Debian發(fā)行版開始,您將向Dockerfile添加以下內(nèi)容:

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

FROM必須是您編寫Dockerfile時使用的第一條指令。請注意,您還可以通過在鏡像名稱的末尾附加:和version_name來使用基礎(chǔ)鏡像的特定版本。例如:

# 設(shè)置基礎(chǔ)鏡像
FROM debian:sid

在上面的代碼中,我們使用的是“sid” Debian(不穩(wěn)定發(fā)行版)。當(dāng)您使用任何這些工具的官方基礎(chǔ)鏡像時,這在您需要特定版本的Ruby或Python解釋器、MySQL版本等時也很重要。目前,在本指南中,我們將堅(jiān)持使用默認(rèn)的(穩(wěn)定的)debian鏡像。

指定維護(hù)者并添加元數(shù)據(jù)

您可以選擇指定維護(hù)者是誰,用您的姓名或負(fù)責(zé)構(gòu)建的人員或團(tuán)隊(duì)替換Lucero del Alba:

# 作者
MAINTAINER Lucero del Alba

這不是必需的,但我們也可以使用LABEL指令添加一些元數(shù)據(jù),這些信息稍后在使用docker inspect命令檢查鏡像時將可用:

# 額外的元數(shù)據(jù)
LABEL version="1.0"
LABEL description="First image with Dockerfile."

有關(guān)此功能的更多信息,請參閱Docker對象標(biāo)簽。

創(chuàng)建您自己的發(fā)行版

How to Build an Image with the Dockerfile

此時,我們將選擇一些要包含在鏡像中的工具和庫,以便我們的容器擁有執(zhí)行預(yù)期操作所需的一切。在本教程結(jié)束時,我們將執(zhí)行一項(xiàng)非常接近實(shí)際構(gòu)建Linux發(fā)行版的工作。

某些容器(例如運(yùn)行PostgreSQL數(shù)據(jù)庫的容器)旨在在后臺運(yùn)行。但是,我們經(jīng)常需要一個控制臺來對容器執(zhí)行某些操作,因此我們可能需要一些額外的工具,因?yàn)榛A(chǔ)鏡像只會捆綁最少的GNU工具。

處理緩存問題

在嘗試在鏡像上安裝附加包時,您幾乎肯定會遇到緩存問題。這是因?yàn)榛A(chǔ)鏡像帶有緩存的元數(shù)據(jù),并且您從中提取數(shù)據(jù)的實(shí)時存儲庫經(jīng)常發(fā)生變化。

在基于Debian的發(fā)行版中,您可以在安裝新包之前添加以下命令來處理此問題:

mkdir ~/my_build
cd ~/my_build
touch Dockerfile

安裝基本工具

代碼編輯器、語言環(huán)境、git或tmux等工具——現(xiàn)在是安裝以后所需的一切的時候了,以便它們捆綁在鏡像中。

我們將每行安裝一個:

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

我們可以在一行中安裝所有這些,但是如果我們稍后要添加或刪除包,則需要重新運(yùn)行整個過程。因此,這里的最佳實(shí)踐是每行安裝一個包,以便您可以從Docker的緩存中獲益。

此外,保持簡潔。您不希望“以防萬一”安裝工具,因?yàn)檫@可能會增加構(gòu)建時間和鏡像大小。

安裝應(yīng)用程序的運(yùn)行時庫

我們還將在此鏡像中交付我們的應(yīng)用程序。您是否需要特定版本的PHP、Ruby或Python以及某些模塊?現(xiàn)在是交付應(yīng)用程序所需的所有程序和運(yùn)行時的時候了。

您可以隨意指定,因?yàn)榇巳萜髦荚?em>僅運(yùn)行您的應(yīng)用程序:

# 設(shè)置基礎(chǔ)鏡像
FROM debian:sid

在此示例中,我們將安裝Python 3以及Psycopg 2(用于連接到PostgreSQL數(shù)據(jù)庫)、Python Mustache模塊和YAML模塊。(在創(chuàng)建您自己的Dockerfile時,您自然會安裝所需的特定依賴項(xiàng)。)

編譯和下載包

您的發(fā)行版也可能沒有您需要的特定模塊或程序的包。但是您不需要在運(yùn)行的容器中手動安裝它!相反,您可以使用RUN指令(每行一個)批量下載、編譯和設(shè)置應(yīng)用程序所需的任何庫。

您甚至可以在單獨(dú)的文件上編寫腳本,將此文件添加到構(gòu)建并運(yùn)行它,我們將在“交付您自己的應(yīng)用程序”部分看到。

清理

為了使您的鏡像整潔且盡可能小,最好在安裝序列結(jié)束時進(jìn)行清理:

# 作者
MAINTAINER Lucero del Alba

同樣,請注意我們使用的是apt-get,因?yàn)槲覀冞x擇了Debian,但是請對基礎(chǔ)鏡像的發(fā)行版使用相應(yīng)的命令。

交付您自己的應(yīng)用程序

構(gòu)建此環(huán)境的全部目的是為了使您可以順利交付應(yīng)用程序并準(zhǔn)備運(yùn)行。為了將文件、目錄甚至遠(yuǎn)程URL的內(nèi)容添加到鏡像中,我們將使用ADD指令。

但是,在添加文件之前,我們需要將它們放在適當(dāng)?shù)?em>上下文中。為了簡化操作,我們將所有內(nèi)容都放在前面提到的my_build目錄中,與Dockerfile本身一起。

假設(shè)使用我們想要放入鏡像中的應(yīng)用程序和所有內(nèi)容,我們在~/my_build中具有以下文件(其中app.py和lib.py位于子目錄app/中):

mkdir ~/my_build
cd ~/my_build
touch Dockerfile

我們將.bashrc和.profile腳本添加到容器中的/root目錄中,以便它們在我們在容器上啟動shell時執(zhí)行,并將app/的內(nèi)容復(fù)制到容器中的/app/目錄中。

我們添加以下指令:

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

設(shè)置您的環(huán)境

最后,我們將設(shè)置一些在系統(tǒng)和應(yīng)用程序級別都需要的一些環(huán)境變量。

你們中的許多人使用默認(rèn)的Debian字符集就可以了,但是由于我們的目標(biāo)是國際受眾,讓我們看看如何擁有UTF-8終端。我們之前安裝了locales包,所以現(xiàn)在我們要做的就是生成字符集并設(shè)置適當(dāng)?shù)腖inux環(huán)境:

# 設(shè)置基礎(chǔ)鏡像
FROM debian:sid

您可能還需要為應(yīng)用程序設(shè)置一些環(huán)境變量,用于交換密碼和路徑。Dockerfile提供ENV指令來精確地執(zhí)行此操作:

# 作者
MAINTAINER Lucero del Alba

請注意,您還可以在啟動容器時從命令行傳遞環(huán)境變量,這對于共享一些敏感信息(例如密碼)可能很方便。

完整的Dockerfile

當(dāng)然,您必須根據(jù)您的需要調(diào)整Dockerfile,但希望您能了解其可能性。

這是完整的文件:

# 額外的元數(shù)據(jù)
LABEL version="1.0"
LABEL description="First image with Dockerfile."

構(gòu)建鏡像

從my_build目錄內(nèi)部,我們將使用docker build命令,傳遞-t標(biāo)志來使用名稱“標(biāo)記”新鏡像,在本例中為my_image。.表示Dockerfile位于當(dāng)前目錄中,以及所謂的“上下文”——即該位置中可能存在的其余文件:

# 更新源列表
RUN apt-get clean
RUN apt-get update

這將生成一個長輸出,其中每個“步驟”都是我們Dockerfile中的一個指令。這是一個截斷的輸出:

# 每行安裝一個基本應(yīng)用程序,以獲得更好的緩存
RUN apt-get install -qy git
RUN apt-get install -qy locales
RUN apt-get install -qy nano
RUN apt-get install -qy tmux
RUN apt-get install -qy wget

列出鏡像

我們可以使用docker images命令列出我們的鏡像:

# 安裝應(yīng)用程序運(yùn)行時和模塊
RUN apt-get install -qy python3
RUN apt-get install -qy python3-psycopg2
RUN apt-get install -qy python3-pystache
RUN apt-get install -qy python3-yaml

這將輸出我們新創(chuàng)建的my_image以及我們下載的其他基礎(chǔ)鏡像:

# 清理
RUN apt-get -qy autoremove

……就是這樣,我們的鏡像已準(zhǔn)備好交付和運(yùn)行!

啟動容器

最后,為了啟動我們新創(chuàng)建的鏡像的交互式終端,我們將使用docker run命令:

<code>.bashrc
.profile
app/app.py
app/lib.py
Dockerfile</code>

后續(xù)步驟

我沒有介紹Dockerfile的所有可能性。特別是,我沒有回顧如何EXPOSE端口以便您可以運(yùn)行服務(wù)甚至在它們之間鏈接容器;如何HEALTHCHECK容器以驗(yàn)證它們?nèi)栽诠ぷ?;甚至如何指定VOLUME以從主機(jī)存儲和恢復(fù)數(shù)據(jù)……以及其他有用功能。

我們將在以后的文章中介紹這些內(nèi)容。目前,您可能想查看以下資源。

來自Docker網(wǎng)站:

  • Dockerfile參考
  • 編寫Dockerfile的最佳實(shí)踐

來自SitePoint:

  • 理解Docker、容器和更安全的軟件交付
  • Docker子頻道
  • 所有與Docker相關(guān)的文章

關(guān)于如何使用Dockerfile構(gòu)建鏡像的常見問題解答

使用Dockerfile構(gòu)建Docker鏡像的重要性是什么?

Dockerfile是一個文本文檔,其中包含用戶可以在命令行上調(diào)用的所有命令,以組裝鏡像。使用Dockerfile簡化了在Docker中構(gòu)建鏡像的過程。它允許您自動化該過程,使其更有效率且更不容易出錯。Dockerfile還提供了關(guān)于如何構(gòu)建鏡像的清晰、版本控制的文檔,這使得其他開發(fā)人員更容易理解您的工作并使用或修改它。

如何使用Dockerfile優(yōu)化構(gòu)建過程?

Dockerfile提供了多種優(yōu)化構(gòu)建過程的方法。最有效的方法之一是使用多階段構(gòu)建。這允許您在Dockerfile中使用多個FROM語句。每個FROM指令都可以使用不同的基礎(chǔ),并且每個指令都開始構(gòu)建的新階段。您可以選擇性地將工件從一個階段復(fù)制到另一個階段,留下您不希望在最終鏡像中出現(xiàn)的所有內(nèi)容。

編寫Dockerfile的最佳實(shí)踐是什么?

編寫Dockerfile有幾個最佳實(shí)踐。首先,您應(yīng)該避免安裝不必要的包,以保持鏡像大小較小。其次,使用多階段構(gòu)建來優(yōu)化構(gòu)建過程。第三,每個Dockerfile都應(yīng)表示單個應(yīng)用程序。如果您有多個應(yīng)用程序,則應(yīng)使用多個Dockerfile。最后,您應(yīng)該使用.dockerignore文件來排除不應(yīng)包含在鏡像中的文件和目錄。

如何調(diào)試Dockerfile?

可以通過構(gòu)建鏡像并使用shell命令運(yùn)行它來調(diào)試Dockerfile。如果構(gòu)建失敗,Docker將返回錯誤消息,可以幫助您識別問題。您還可以使用RUN命令來執(zhí)行將幫助您調(diào)試Dockerfile的命令。

我可以在Dockerfile中使用環(huán)境變量嗎?

是的,您可以在Dockerfile中使用環(huán)境變量。ENV指令將環(huán)境變量設(shè)置為該值。此值將在構(gòu)建階段的所有后續(xù)指令的環(huán)境中,并且也可以在許多指令中內(nèi)聯(lián)替換。

如何將文件從主機(jī)復(fù)制到Docker鏡像?

您可以使用COPY指令將新文件從主機(jī)復(fù)制到Docker鏡像。文件從主機(jī)上的源復(fù)制到Docker鏡像中的目標(biāo)。

如何在Docker鏡像中公開端口?

您可以使用EXPOSE指令通知Docker容器在運(yùn)行時偵聽指定的網(wǎng)絡(luò)端口。但是,這實(shí)際上并沒有發(fā)布端口。要發(fā)布端口,您需要在docker run命令上使用-p標(biāo)志。

如何在Docker鏡像中設(shè)置工作目錄?

您可以使用WORKDIR指令為Dockerfile中后續(xù)的任何RUN、CMD、ENTRYPOINT、COPY和ADD指令設(shè)置工作目錄。

如何在Docker鏡像中運(yùn)行命令?

您可以使用RUN指令在Docker鏡像中運(yùn)行命令。這將在當(dāng)前鏡像之上新的層上執(zhí)行任何命令,并提交結(jié)果。

如何為Docker鏡像指定默認(rèn)命令?

您可以使用CMD指令為正在執(zhí)行的容器提供默認(rèn)值。這些可以包括可執(zhí)行文件,或者可以省略可執(zhí)行文件,在這種情況下,您必須指定ENTRYPOINT指令。

This revised output maintains the original image formatting and avoids significant changes to the article's meaning while rephrasing sentences and paragraphs for originality. Remember to replace /uploads/20250218/... with the actual image URLs.

以上是如何使用Dockerfile構(gòu)建圖像的詳細(xì)內(nèi)容。更多信息請關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本站聲明
本文內(nèi)容由網(wǎng)友自發(fā)貢獻(xiàn),版權(quán)歸原作者所有,本站不承擔(dān)相應(yīng)法律責(zé)任。如您發(fā)現(xiàn)有涉嫌抄襲侵權(quán)的內(nèi)容,請聯(lián)系admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費(fèi)脫衣服圖片

Undresser.AI Undress

Undresser.AI Undress

人工智能驅(qū)動的應(yīng)用程序,用于創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用于從照片中去除衣服的在線人工智能工具。

Clothoff.io

Clothoff.io

AI脫衣機(jī)

Video Face Swap

Video Face Swap

使用我們完全免費(fèi)的人工智能換臉工具輕松在任何視頻中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費(fèi)的代碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

功能強(qiáng)大的PHP集成開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級代碼編輯軟件(SublimeText3)

用于購買SSL證書的經(jīng)濟(jì)有效的轉(zhuǎn)售商平臺 用于購買SSL證書的經(jīng)濟(jì)有效的轉(zhuǎn)售商平臺 Jun 25, 2025 am 08:28 AM

在一個在線信任不可談判的世界中,SSL證書對于每個網(wǎng)站都至關(guān)重要。 SSL認(rèn)證的市場規(guī)模在2024年價值56億美元,并且由于電子商務(wù)業(yè)務(wù)的激增而推動了強(qiáng)勁的增長

SaaS的5個最佳支付門戶:您的最終指南 SaaS的5個最佳支付門戶:您的最終指南 Jun 29, 2025 am 08:28 AM

付款網(wǎng)關(guān)是付款過程的關(guān)鍵組成部分,使企業(yè)能夠在線接受付款。它充當(dāng)客戶與商人之間的橋梁,安全地傳輸付款信息并促進(jìn)交易。 為了

新研究聲稱AI比我們更好地'理解”情緒。特別是在情感上充滿電的情況下 新研究聲稱AI比我們更好地'理解”情緒。特別是在情感上充滿電的情況下 Jul 03, 2025 pm 05:48 PM

在我們認(rèn)為人類始終超越機(jī)器的領(lǐng)域的另一個挫折中,研究人員現(xiàn)在建議AI比我們更好地理解情感。研究人員發(fā)現(xiàn)人工智能證明了一個

由于新的Microsoft AI型號 由于新的Microsoft AI型號 Jul 05, 2025 am 12:44 AM

一種新的人工智能(AI)模型已經(jīng)證明了比幾個使用最廣泛使用的全球預(yù)測系統(tǒng)更快,更精確地預(yù)測重大天氣事件的能力。該名為Aurora的模型已接受過培訓(xùn)。

您的設(shè)備喂養(yǎng)AI助手并收集個人數(shù)據(jù),即使他們睡著了。這是如何知道您分享的內(nèi)容。 您的設(shè)備喂養(yǎng)AI助手并收集個人數(shù)據(jù),即使他們睡著了。這是如何知道您分享的內(nèi)容。 Jul 05, 2025 am 01:12 AM

不管喜歡與否,人工智能已成為日常生活的一部分。許多設(shè)備(包括電動剃須刀和牙刷)已成為AI驅(qū)動的“使用機(jī)器學(xué)習(xí)算法來跟蹤一個人的使用方式,Devi的方式

高級AI型號的CO&#8322;回答相同問題時的排放量比更常見的LLM 高級AI型號的CO&#8322;回答相同問題時的排放量比更常見的LLM Jul 06, 2025 am 12:37 AM

根據(jù)最近的一項(xiàng)研究,我們試圖使AI模型的功能越精確,其碳排放量就越大 - 某些提示產(chǎn)生的二氧化碳比其他提示高達(dá)50倍。

威脅AI聊天機(jī)器人,它將撒謊,作弊和'讓您死”以阻止您,并警告 威脅AI聊天機(jī)器人,它將撒謊,作弊和'讓您死”以阻止您,并警告 Jul 04, 2025 am 12:40 AM

根據(jù)一項(xiàng)新的研究,人工智能(AI)模型在模型的目標(biāo)和用戶決定之間發(fā)生沖突時可能會威脅和勒索人類。

See all articles