0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Podman中運(yùn)用容器存儲(chǔ)庫(kù)實(shí)用教程

馬哥Linux運(yùn)維 ? 來(lái)源:稀土掘金 ? 2024-03-05 14:32 ? 次閱讀

對(duì)于使用容器的用戶來(lái)說(shuō),容器如何存儲(chǔ)在磁盤上通常是一個(gè)謎。在這篇文章中,我們將了解容器鏡像的存儲(chǔ)方式以及可用于直接處理這些鏡像的一些工具 - Podman

容器鏡像存儲(chǔ)的演變

當(dāng)我第一次開(kāi)始使用容器時(shí),我不喜歡 Docker 架構(gòu)的一件事是守護(hù)進(jìn)程隱藏了有關(guān)鏡像存儲(chǔ)的信息。人們使用鏡像的唯一現(xiàn)實(shí)方式是通過(guò)守護(hù)進(jìn)程。我們正在開(kāi)發(fā)該atomic工具,并希望有一種方法來(lái)掛載容器鏡像,以便我們可以掃描它們。畢竟,容器鏡像只是 devicemapper 或覆蓋層下的掛載點(diǎn)。

Red Hat 的容器運(yùn)行時(shí)團(tuán)隊(duì)創(chuàng)建了atomic mount在 Docker 下掛載鏡像的命令,并在atomic scan.這里的問(wèn)題是守護(hù)進(jìn)程不知道這一點(diǎn),因此如果有人試圖在我們安裝鏡像時(shí)刪除鏡像,守護(hù)進(jìn)程會(huì)感到困惑。鎖定和操作必須在守護(hù)進(jìn)程內(nèi)完成。

當(dāng)我們開(kāi)始創(chuàng)建新的容器引擎時(shí),我們需要的第一件事就是構(gòu)建一個(gè)新的容器/存儲(chǔ)庫(kù),它不需要守護(hù)進(jìn)程來(lái)控制它。我們希望允許多個(gè)工具同時(shí)使用存儲(chǔ),而無(wú)需相互了解。

我們將使用文件系統(tǒng)鎖定來(lái)控制對(duì)存儲(chǔ)數(shù)據(jù)的訪問(wèn)。第一步是分離出 Docker 項(xiàng)目下的容器/存儲(chǔ),稱為 graphdriver。這些存儲(chǔ)驅(qū)動(dòng)程序?qū)崿F(xiàn)了不同的寫(xiě)時(shí)復(fù)制(COW)存儲(chǔ)驅(qū)動(dòng)程序,包括overlay、devicemapper、btrfs、xfs、vfs、aufs……如果你想在go項(xiàng)目中使用該庫(kù),那么你只需實(shí)現(xiàn)一個(gè)存儲(chǔ)即可。

[請(qǐng)注意,容器/存儲(chǔ)庫(kù)與容器存儲(chǔ)接口CSI)無(wú)關(guān)。容器/存儲(chǔ)是將容器鏡像存儲(chǔ)在COW文件系統(tǒng)上,而CSI則用于容器寫(xiě)入的卷。例如,您可以使用 CSI 來(lái)存儲(chǔ) MariaDB 容器鏡像使用的數(shù)據(jù)庫(kù),該數(shù)據(jù)庫(kù)存儲(chǔ)在容器/存儲(chǔ)中。我希望這能消除任何困惑。

容器存儲(chǔ)配置在 storage.conf 文件中定義。對(duì)于以 root 身份運(yùn)行的容器引擎,storage.conf 文件存儲(chǔ)在/etc/containers/storage.conf.如果您使用 Podman 等工具無(wú)根運(yùn)行,則 storage.conf 文件存儲(chǔ)在$HOME/.config/containers/storage.conf.

現(xiàn)在我們來(lái)看一下storage.conf。

driver


$ cat /etc/containers/storage.conf
# This file is is the configuration file for all tools
# that use the containers/storage library.
# See man 5 containers-storage.conf for more information
# The "container storage" table contains all of the server options.
[storage]
# Default Storage Driver
driver = "overlay"


驅(qū)動(dòng)領(lǐng)域至關(guān)重要。在容器/存儲(chǔ)中,我們默認(rèn)使用overlay驅(qū)動(dòng)程序。在 Docker 世界中,有兩個(gè) Overlay 驅(qū)動(dòng)程序,overlay 和 Overlay2,現(xiàn)在大多數(shù)用戶使用 Overlay2 驅(qū)動(dòng)程序,所以我們只使用其中一個(gè),并將其稱為 Overlay。如果您不小心在配置容器中使用了overlay2,存儲(chǔ)足夠智能,可以將其別名為overlay。

graphroot


# Temporary storage location
runroot = "/var/run/containers/storage"
# Primary Read/Write location of container storage
graphroot = "/var/lib/containers/storage"

graphroot定義了實(shí)際鏡像的存儲(chǔ)位置。我們建議您在此位置設(shè)置大量空間,因?yàn)槿藗兺鶗?huì)隨著時(shí)間的推移存儲(chǔ)大量鏡像。設(shè)置存儲(chǔ)不需要特殊工具,您應(yīng)該使用標(biāo)準(zhǔn) Linux 命令以最適合您需求的任何方式設(shè)置存儲(chǔ),但我們建議您在 /var/lib/containers 上掛載大型設(shè)備。

storage.options

[storage.options]
# Storage options to be passed to underlying storage drivers

每個(gè)圖形驅(qū)動(dòng)程序有很多存儲(chǔ)選項(xiàng)。其中一些允許您使用容器存儲(chǔ)做一些有趣的事情,我將在下面討論其中的一些。

additionalimagestores


# AdditionalImageStores is used to pass paths to additional Read/Only image stores
# Must be comma separated list.
additionalimagestores = [
]


additionalimagestores是一項(xiàng)很酷的功能,它允許您設(shè)置附加的只讀鏡像存儲(chǔ)。例如,您可以設(shè)置包含許多覆蓋容器鏡像像的 NFS 共享,并通過(guò) NFS 與所有容器引擎共享它們。然后,他們可以使用 NFS 存儲(chǔ)上的鏡像并啟動(dòng)容器,而不是要求每個(gè)運(yùn)行容器引擎的節(jié)點(diǎn)拉取巨大的鏡像。

size


# Size is used to set a maximum size of the container image.  Only supported by
# certain container storage drivers.
size = ""


大小控制容器鏡像的大小,如果您運(yùn)行的系統(tǒng)中有大量用戶將拉取鏡像,您可能需要設(shè)置配額以確保沒(méi)有用戶能夠拉取巨大的鏡像。例如,OpenShift.com使用此功能來(lái)控制其用戶,尤其是在使用OpenShift Online時(shí)。

mounting


# Path to an helper program to use for mounting the file system instead of mounting it
# directly.
# mount_program = "/usr/bin/fuse-overlayfs"
# mountopt specifies comma separated list of extra mount options
mountopt = "nodev"


該標(biāo)志允許您將特殊的安裝選項(xiàng)傳遞到驅(qū)動(dòng)程序中。例如,設(shè)置該nodev字段可防止用戶使用容器鏡像中顯示的設(shè)備節(jié)點(diǎn)。容器引擎在安裝于 的 tmpfs 上提供設(shè)備/dev,因此沒(méi)有理由將設(shè)備嵌入到鏡像中,特別是當(dāng)它們可用于規(guī)避安全性時(shí)。

Remap-UIDs/GIDs


# Remap-UIDs/GIDs is the mapping from UIDs/GIDs as they should appear inside of
# a container, to UIDs/GIDs as they should appear outside of the container, and
# the length of the range of UIDs/GIDs. Additional mapped sets can be listed
# and will be heeded by libraries, but there are limits to the number of
# mappings which the kernel will allow when you later attempt to run a
# container.
#
# remap-uids = 065536
# remap-gids = 065536


重新映射 uids 和 gids 標(biāo)志告訴容器/存儲(chǔ)以重新映射的格式存儲(chǔ)鏡像,供指定用戶命名空間內(nèi)的用戶使用。如果您設(shè)置remap-uidsto ,065536這會(huì)告訴容器存儲(chǔ)在存儲(chǔ)鏡像時(shí)重新映射UID=0to100,000, UID=1、to等(直到 uid )擁有的文件。現(xiàn)在,如果容器引擎在映射內(nèi)運(yùn)行容器,它將使用與用戶而不是 root 關(guān)聯(lián)的 uid 更安全地運(yùn)行。100,001``UID=2``100,0002``65536


# Remap-User/Group is a name which can be used to look up one or more UID/GID
# ranges in the /etc/subuid or /etc/subgid file. Mappings are set up starting
# with an in-container ID of 0 and the a host-level ID taken from the lowest
# range that matches the specified name, and using the length of that range.
# Additional ranges are then assigned, using the ranges which specify the
# lowest host-level IDs first, to the lowest not-yet-mapped container-level ID,
# until all of the entries have been used for maps.
#
# remap-user = "storage"
# remap-group = "storage"
[storage.options.thinpool]
# Storage Options for thinpool


Others

其余選項(xiàng)用于使用 devicemapper 等驅(qū)動(dòng)程序以及其他一些選項(xiàng)創(chuàng)建 Thinpool。您可以參考/etc/containers/storage.conf磁盤上的文件以獲取說(shuō)明,也可以參考 storage.conf(5) 手冊(cè)頁(yè)以獲取更多信息。

使用容器存儲(chǔ)

容器引擎和 Podman、Buildah、CRI-O、Skopeo 等工具同時(shí)共享容器存儲(chǔ)。他們都可以看到彼此的鏡像,并且可以基于文件鎖定彼此結(jié)合使用或完全單獨(dú)使用。這意味著 podman 可以安裝和檢查容器。雖然它們共享實(shí)際存儲(chǔ),但它們不一定共享容器信息。有些工具具有不同的容器用例,并且不會(huì)顯示其他工具的容器。例如,buildah 只是為了構(gòu)建容器鏡像的過(guò)程而創(chuàng)建構(gòu)建容器,因?yàn)檫@些不需要 podman 容器的所有內(nèi)容,所以它有一個(gè)單獨(dú)的數(shù)據(jù)庫(kù)。機(jī)器人工具可以刪除彼此的容器鏡像,但它們會(huì)單獨(dú)處理它們。


# podman create -ti --name fedora-ctr fedora sh
ed4b68304e9fbbbc527593c28c917535e1d67d7d5c3f25edc568b71275ab69fc
sh-4.4# podman mount fedora-ctr
/var/lib/containers/storage/overlay/b16991596db22b90b78ef10276e2ae73a1c2ca9605014cad95aac00bff6608bc/merged
# ls /var/lib/containers/storage/overlay/b16991596db22b90b78ef10276e2ae73a1c2ca9605014cad95aac00bff6608bc/merged
binbootdevetchomeliblib64lost+foundmediamntoptprocrootrunsbinsrvsystmpusrvar

雖然 buildah 和 CRI-O 可以使用相同的 Fedora 鏡像

您甚至可以使用 Skopeo 在啟動(dòng)時(shí)預(yù)加載容器/存儲(chǔ),以使容器/鏡像可供任何容器工具技術(shù)使用。請(qǐng)記住,沒(méi)有容器守護(hù)程序控制此訪問(wèn),只有標(biāo)準(zhǔn)文件系統(tǒng)工具。

審核編輯:黃飛

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 驅(qū)動(dòng)程序
    +關(guān)注

    關(guān)注

    19

    文章

    810

    瀏覽量

    47864
  • 容器
    +關(guān)注

    關(guān)注

    0

    文章

    490

    瀏覽量

    22014

原文標(biāo)題:Podman中如何使用容器存儲(chǔ)庫(kù)和相關(guān)工具

文章出處:【微信號(hào):magedu-Linux,微信公眾號(hào):馬哥Linux運(yùn)維】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    SQL存儲(chǔ)過(guò)程在.NET數(shù)據(jù)庫(kù)的應(yīng)用

    。  圖3五.創(chuàng)建簡(jiǎn)單存儲(chǔ)過(guò)程的數(shù)據(jù)庫(kù)應(yīng)用程序: 下面我們就運(yùn)用上述的不帶參數(shù)的存儲(chǔ)過(guò)程來(lái)一個(gè)數(shù)據(jù)庫(kù)應(yīng)用程序,其中還用到了ADO.
    發(fā)表于 12-31 16:54

    如何在Docker創(chuàng)建容器

    是 Docker 映像(image)文件的最大存儲(chǔ)庫(kù),Docker Hub的映像文件是由其他開(kāi)發(fā)者自定義并上傳的。 3.在搜索結(jié)果清單中選中您需要的項(xiàng)目,然后點(diǎn)擊“下載”。下載的映像文件將被添加到“映像
    發(fā)表于 01-03 15:58

    超級(jí)電容器的原理及應(yīng)用

    非常大。根據(jù)超級(jí)電容器原理,其在運(yùn)用過(guò)程中并沒(méi)有出現(xiàn)化學(xué)反應(yīng),僅僅是在物理性質(zhì)上的變化,因而超級(jí)電容器的穩(wěn)定性更加可靠。 目前,超級(jí)電容器憑借強(qiáng)大的儲(chǔ)存容量及
    發(fā)表于 07-21 15:56

    超級(jí)電容器的原理及應(yīng)用

    非常大。根據(jù)超級(jí)電容器原理,其在運(yùn)用過(guò)程中并沒(méi)有出現(xiàn)化學(xué)反應(yīng),僅僅是在物理性質(zhì)上的變化,因而超級(jí)電容器的穩(wěn)定性更加可靠。目前,超級(jí)電容器憑借強(qiáng)大的儲(chǔ)存容量及
    發(fā)表于 04-29 15:04

    在匯編程序靈活運(yùn)用TSRs的程序庫(kù)

    在匯編程序靈活運(yùn)用TSRs的程序庫(kù)
    發(fā)表于 02-24 14:43 ?2次下載

    數(shù)據(jù)庫(kù)存儲(chǔ)過(guò)程和觸發(fā)器有什么作用?如何創(chuàng)建和應(yīng)用?

    很多管理任務(wù),利用一些常用的系統(tǒng)存儲(chǔ)過(guò)程可以很方便的查看、操作數(shù)據(jù)庫(kù)對(duì)象。系統(tǒng)存儲(chǔ)過(guò)程的命名通常以”sp_”作為前綴,并且存儲(chǔ)于Master數(shù)據(jù)庫(kù)
    發(fā)表于 09-26 15:15 ?3次下載
    數(shù)據(jù)<b class='flag-5'>庫(kù)</b><b class='flag-5'>中</b><b class='flag-5'>存儲(chǔ)</b>過(guò)程和觸發(fā)器有什么作用?如何創(chuàng)建和應(yīng)用?

    判斷Linux庫(kù)文件編譯時(shí)是否運(yùn)用-g選項(xiàng)的方法

    判斷Linux庫(kù)文件編譯時(shí)是否運(yùn)用-g選項(xiàng)的方法
    的頭像 發(fā)表于 06-22 08:40 ?3356次閱讀
    判斷Linux<b class='flag-5'>庫(kù)</b>文件編譯時(shí)是否<b class='flag-5'>運(yùn)用</b>-g選項(xiàng)的方法

    2021年最熱門的云原生存儲(chǔ)解決方案之一:容器原生存儲(chǔ)

    能夠在容器內(nèi)運(yùn)行。結(jié)合諸如StatefulSets之類的K8s設(shè)計(jì),它提供了可靠性和穩(wěn)定性,可以在生產(chǎn)環(huán)境運(yùn)行任務(wù)關(guān)鍵型工作負(fù)載。 與容器運(yùn)行時(shí)一起,容器原生
    的頭像 發(fā)表于 01-06 17:48 ?2677次閱讀
    2021年最熱門的云原生<b class='flag-5'>存儲(chǔ)</b>解決方案之一:<b class='flag-5'>容器</b>原生<b class='flag-5'>存儲(chǔ)</b>

    Podman for macOS macOS平臺(tái)的Podman前端

    ./oschina_soft/podman-macos.zip
    發(fā)表于 06-23 11:13 ?0次下載
    <b class='flag-5'>Podman</b> for macOS macOS平臺(tái)的<b class='flag-5'>Podman</b>前端

    STM32Cbue LL庫(kù)巧妙運(yùn)用“靜態(tài)內(nèi)聯(lián)”

    STM32的標(biāo)準(zhǔn)外設(shè)庫(kù)、HAL、LL軟件庫(kù),都有很多巧妙之處值得大家借鑒。 今天講講STM32Cbue LL庫(kù)巧妙運(yùn)用“靜態(tài)內(nèi)聯(lián)”使代
    發(fā)表于 08-14 14:30 ?1098次閱讀

    在Rocky8安裝并使用podman

    Podman是redhat發(fā)行的容器管理工具,類似于docker,但是沒(méi)有守護(hù)進(jìn)程。它不僅可以管理OCI容器,還可以管理pod, 這也是和docker的最大差別吧.
    的頭像 發(fā)表于 10-10 09:32 ?2031次閱讀

    如何安裝podman并創(chuàng)建podman容器

    Nano 現(xiàn)在已安裝在你的自定義容器。還可以交互式的運(yùn)行容器
    的頭像 發(fā)表于 11-10 09:17 ?3003次閱讀

    組織容器網(wǎng)絡(luò)的原理及方案

    Podman 容器管理器的一個(gè)很好的特性是關(guān)注于 rootless 容器。但是,你可能注意到,本文使用了很多 sudo 命令。說(shuō)明,沒(méi)有 root 權(quán)限無(wú)法配置網(wǎng)絡(luò)。
    發(fā)表于 12-31 16:01 ?288次閱讀

    C++之STL庫(kù)容器

    前面跟大家介紹過(guò)STL庫(kù),STL主要是由6大部分組成,其中第一個(gè)提到的就是容器,容器在介紹STL中小哥有簡(jiǎn)單的跟大家介紹過(guò),今天稍微再詳細(xì)介紹一下
    的頭像 發(fā)表于 02-21 10:55 ?1088次閱讀
    C++之STL<b class='flag-5'>庫(kù)</b><b class='flag-5'>中</b>的<b class='flag-5'>容器</b>

    超級(jí)電容器的應(yīng)用

    容器能夠集成到消費(fèi)電子產(chǎn)品,IT設(shè)備和通信體系,以保護(hù)存儲(chǔ)器內(nèi)容。相關(guān)運(yùn)用程序是內(nèi)部備用電源。超級(jí)電容器能夠作為電池替換或短期備用電源。
    的頭像 發(fā)表于 02-10 18:03 ?1812次閱讀
    超級(jí)電<b class='flag-5'>容器</b>的應(yīng)用