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

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Podman中運用容器存儲庫實用教程

馬哥Linux運維 ? 來源:稀土掘金 ? 2024-03-05 14:32 ? 次閱讀

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

容器鏡像存儲的演變

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

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

當我們開始創(chuàng)建新的容器引擎時,我們需要的第一件事就是構建一個新的容器/存儲庫,它不需要守護進程來控制它。我們希望允許多個工具同時使用存儲,而無需相互了解。

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

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

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

現(xiàn)在我們來看一下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"


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

graphroot


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

graphroot定義了實際鏡像的存儲位置。我們建議您在此位置設置大量空間,因為人們往往會隨著時間的推移存儲大量鏡像。設置存儲不需要特殊工具,您應該使用標準 Linux 命令以最適合您需求的任何方式設置存儲,但我們建議您在 /var/lib/containers 上掛載大型設備。

storage.options

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

每個圖形驅動程序有很多存儲選項。其中一些允許您使用容器存儲做一些有趣的事情,我將在下面討論其中的一些。

additionalimagestores


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


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

size


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


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

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"


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

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 標志告訴容器/存儲以重新映射的格式存儲鏡像,供指定用戶命名空間內的用戶使用。如果您設置remap-uidsto ,065536這會告訴容器存儲在存儲鏡像時重新映射UID=0to100,000, UID=1、to等(直到 uid )擁有的文件?,F(xiàn)在,如果容器引擎在映射內運行容器,它將使用與用戶而不是 root 關聯(lián)的 uid 更安全地運行。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

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

使用容器存儲

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


# 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 在啟動時預加載容器/存儲,以使容器/鏡像可供任何容器工具技術使用。請記住,沒有容器守護程序控制此訪問,只有標準文件系統(tǒng)工具。

審核編輯:黃飛

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

    關注

    19

    文章

    818

    瀏覽量

    47906
  • 容器
    +關注

    關注

    0

    文章

    492

    瀏覽量

    22028

原文標題:Podman中如何使用容器存儲庫和相關工具

文章出處:【微信號:magedu-Linux,微信公眾號:馬哥Linux運維】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    SQL存儲過程在.NET數(shù)據(jù)的應用

    。  圖3五.創(chuàng)建簡單存儲過程的數(shù)據(jù)應用程序: 下面我們就運用上述的不帶參數(shù)的存儲過程來一個數(shù)據(jù)應用程序,其中還用到了ADO.
    發(fā)表于 12-31 16:54

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

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

    超級電容器的原理及應用

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

    超級電容器的原理及應用

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

    在匯編程序靈活運用TSRs的程序

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

    數(shù)據(jù)存儲過程和觸發(fā)器有什么作用?如何創(chuàng)建和應用?

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

    判斷Linux文件編譯時是否運用-g選項的方法

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

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

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

    Podman for macOS macOS平臺的Podman前端

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

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

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

    在Rocky8安裝并使用podman

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

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

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

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

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

    C++之STL容器

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

    超級電容器的應用

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