清理映象 構建更小的容器映象的技巧

2021-10-14 21:41:48 字數 2724 閱讀 4506

linux 容器已經成為乙個熱門話題,保證容器映象較小被認為是乙個好習慣。本文提供了有關如何構建較小 fedora 容器映象的一些技巧。

-- muayyad alsadi(作者)

linux 容器已經成為乙個熱門話題,保證容器映象較小被認為是乙個好習慣。本文提供了有關如何構建較小 fedora 容器映象的一些技巧。

fedora 的 dnf 是用 python 編寫的,因為它有各種各樣的外掛程式,因此它的設計是可擴充套件的。但是 有乙個 fedora 基本容器映象替代品,它使用乙個較小的名為 microdnf 的包管理器,使用 c 編寫。要在 dockerfile 中使用這個最小的映象,from行應該如下所示:

from registry.fedoraproject.org/fedora-minimal:30
如果你的映象不需要像 python 這樣的典型 dnf 依賴項,例如,如果你在製作 nodejs 映象時,那麼這是乙個重要的節省項。

為了節省空間,使用dnf clean all或其 microdnf 等效的microdnf clean all刪除倉庫元資料非常重要。但是你不應該分兩步執行此操作,因為這實際上會將這些檔案儲存在容器映象中,然後在另一層中將其標記為刪除。要正確地執行此操作,你應該像這樣一步完成安裝和清理:

from registry.fedoraproject.org/fedora-minimal:30

run microdnf install nodejs && microdnf clean all

模組化是一種給你選擇不同堆疊版本的方法。例如,你可能需要在專案中用非 lts 的 nodejs v11,舊的 lts nodejs v8 用於另乙個,最新的 lts nodejs v10 用於另乙個。你可以使用冒號指定流。

# dnf module list

# dnf module install nodejs:8

dnf module install命令意味著兩個命令,乙個啟用流,另乙個是從它安裝 nodejs。

# dnf module enable nodejs:8

# dnf install nodejs

儘管microdnf不提供與模組化相關的任何命令,但是可以啟用帶有配置檔案的模組,並且 libdnf(被 microdnf 使用)似乎支援模組化流。該檔案看起來像這樣:

/etc/dnf/modules.d/nodejs.module

[nodejs]

name=nodejs

stream=8

profiles=

state=enabled

使用模組化的microdnf的完整 dockerfile 如下所示:

from registry.fedoraproject.org/fedora-minimal:30

run

echo -e "[nodejs]nname=nodejsnstream=8nprofiles=nstate=enabledn" > /etc/dnf/modules.d/nodejs.module &&

microdnf install nodejs zopfli findutils busybox &&

microdnf clean all

在許多情況下,你可能需要大量的無需用於執行軟體的構建時依賴項,例如構建乙個靜態鏈結依賴項的 go 二進位制檔案。多階段構建是分離應用構建和應用執行時的有效方法。

例如,下面的 dockerfile 構建了乙個 go 應用 confd。

通過在from指令之後新增as並從基本容器映象中新增另乙個from然後使用copy --from=指令將內容從構建的容器複製到第二個容器來完成多階段構建。

可以使用podman構建並執行此 dockerfile:

$ podman build -t myconfd .

$ podman run -it myconfd

docker的容器和映象的清理

docker使用者會在使用docker一段時間後發現宿主機的磁碟很容易就快被佔滿,並且手動docker rmi imgname 似乎並不能釋放磁碟,貌似想刪掉的映象依然在宿主機中,下面針對這一問題提出一些解決方案。docker空間占用檢視 1.13版本後docker提供給了一些system命令,例如...

如何使用 Buildah 構建容器映象

project atomic 通過他們在 open container initiative oci 上的努力創造了乙個名為 buildah 的偉大工具。buildah 能幫助建立 構建和更新,它支援 docker 容器映象以及 oci 相容映象。buildah 處理構建容器映象時無需安裝完整的容器...

Docker小記 從容器構建映象

這條命令會啟動乙個執行bash shell的新容器。基於這個shell,你就能夠輸入命令來自定義你的容器了 docker run it name image dev ubuntu latest bin bashdocker commit old container name new containe...