?
This document uses PHP Chinese website manual Release
大多數(shù)Dockerfiles從父映像開(kāi)始。如果您需要完全控制圖像的內(nèi)容,則可能需要?jiǎng)?chuàng)建基本圖像。以下是區(qū)別:
一個(gè)父映像是你的形象是基于圖像。它FROM
指向Dockerfile中指令的內(nèi)容。Dockerfile中的每個(gè)后續(xù)聲明都會(huì)修改此父圖像。大多數(shù)Dockerfiles從父映像開(kāi)始,而不是基本映像。但是,這些術(shù)語(yǔ)有時(shí)可以互換使用。
一個(gè)基本圖像要么不具有FROM
線(xiàn)在其Dockerfile,或具有FROM scratch
。
本主題向您展示了創(chuàng)建基礎(chǔ)圖像的幾種方法。具體的過(guò)程將在很大程度上取決于你想打包的 Linux發(fā)行版。我們?cè)谙旅嬗幸恍├?,并鼓?lì)您提交拉取請(qǐng)求以提供新的請(qǐng)求。
一般來(lái)說(shuō),您需要從一臺(tái)運(yùn)行您希望打包為父映像的發(fā)行版的工作機(jī)器開(kāi)始,不過(guò)對(duì)于像 Debian 的 Debootstrap 這樣的工具來(lái)說(shuō),這并不是必需的,您也可以使用它來(lái)構(gòu)建 Ubuntu 映像。
它可以像創(chuàng)建 Ubuntu 父圖像一樣簡(jiǎn)單:
$ sudo debootstrap xenial xenial > /dev/null$ sudo tar -C xenial -c . | docker import - xenial a29c15f1bf7a $ docker run xenial cat /etc/lsb-release DISTRIB_ID=Ubuntu DISTRIB_RELEASE=16.04DISTRIB_CODENAME=xenial DISTRIB_DESCRIPTION="Ubuntu 16.04 LTS"
在 Docker GitHub Repo 中有更多用于創(chuàng)建父圖像的示例腳本:
BusyBox
在Debian / Ubuntu 或 CentOS / RHEL / SLC /等上的 CentOS / Scientific Linux CERN(SLC)。
Debian/Ubuntu
您可以使用 Docker 的保留最小圖像scratch
作為構(gòu)建容器的起點(diǎn)。使用scratch
“圖像”信號(hào)構(gòu)建過(guò)程,您希望其中的下一個(gè)命令Dockerfile
成為圖像中的第一個(gè)文件系統(tǒng)層。
當(dāng)scratch
出現(xiàn)在集線(xiàn)器上的 Docker 存儲(chǔ)庫(kù)中時(shí),您無(wú)法將其拉出,運(yùn)行或標(biāo)記具有該名稱(chēng)的任何圖像scratch
。相反,你可以參考你的Dockerfile
。例如,要使用scratch
以下命令創(chuàng)建最小容器:
FROM scratch ADD hello /CMD ["/hello"]
假設(shè)您從Docker GitHub示例C源代碼構(gòu)建了“hello”可執(zhí)行示例,并且使用該-static
標(biāo)記編譯了該示例,則可以使用以下命令構(gòu)建此 Docker 映像:docker build --tag hello .
注意:由于 Docker for Mac 和 Docker for Windows 使用 Linux VM,因此必須使用 Linux 工具鏈編譯此代碼,以最終形成 Linux 二進(jìn)制文件。不用擔(dān)心,您可以快速下載 Linux 映像和構(gòu)建環(huán)境并在其中構(gòu)建:
$ docker run --rm -it -v $PWD:/build ubuntu:16.04container# apt-get update && apt-get install build-essential container# cd /build container# gcc -o hello -static -nostartfiles hello.c
然后,您可以使用以下命令運(yùn)行它(在 Linux,Mac 或 Windows 上): docker run --rm hello
本示例將創(chuàng)建教程中使用的 hello-world 圖像。如果你想測(cè)試它,你可以克隆圖像回購(gòu)。
有更多的資源可以幫助你寫(xiě)你的Dockerfile
。
Dockerfile
有關(guān)參考部分中可用于a的所有說(shuō)明的完整指南。
為了幫助您編寫(xiě)清晰,可讀,可維護(hù)的文檔Dockerfile
,我們還編寫(xiě)了Dockerfile
最佳實(shí)踐指南。
如果您的目標(biāo)是創(chuàng)建一個(gè)新的官方存儲(chǔ)庫(kù),請(qǐng)務(wù)必閱讀Docker的官方存儲(chǔ)庫(kù)。