開源容器 Podman 常用命令總結!
Podman簡介
什麼是Podman?
Podman 是一個開源的容器執行時專案,可在大多數 Linux 平臺上使用。
Podman 提供與 Docker 非常相似的功能。正如前面提到的那樣,它不需要在你的系統上執行任何守護程式,並且它也可以在沒有 root 許可權的情況下執行。
Podman 可以管理和執行任何符合 OCI(Open Container Initiative)規範的容器和容器映象。Podman 提供了一個與 Docker 相容的命令列前端來管理 Docker 映象。
Podman 官網地址:
Podman和Docker的主要區別是什麼?
dockers在實現CRI的時候,它需要一個守護程式,其次需要以root執行,因此這也帶來了安全隱患。
podman不需要守護程式,也不需要root使用者執行,從邏輯架構上,比docker更加合理。
在docker的執行體系中,需要多個daemon才能呼叫到OCI的實現RunC。
在容器管理的鏈路中,Docker Engine的實現就是dockerd
daemon,它在linux中需要以root執行,dockerd呼叫containerd,containerd呼叫containerd-shim,然後才能呼叫runC。顧名思義shim起的作用也就是“墊片”,避免父程式退出影響容器的運訓
podman直接呼叫OCI,runtime(runC),透過common作為容器程式的管理工具,但不需要dockerd這種以root身份執行的守護程式。
在podman體系中,有個稱之為common的守護程式,其執行路徑通常是/usr/libexec/podman/conmon,它是各個容器程式的父程式,每個容器各有一個,common的父則通常是1號程式。podman中的common其實相當於docker體系中的containerd-shim。
圖中所體現的事情是,podman不需要守護程式,而dorker需要守護程式。在這個圖的示意中,dorcker的containerd-shim與podman的common被歸在Container一層。
Podman的使用與docker有什麼區別?
podman的定位也是與docker相容,因此在使用上面儘量靠近docker。在使用方面,可以分成兩個方面來說,一是系統構建者的角度,二是使用者的角度。
在系統構建者方面,用podman的預設軟體,與docker的區別不大,只是在程式模型、程式關係方面有所區別。如果習慣了docker幾個關聯程式的除錯方法,在podman中則需要適應。可以透過pstree命令檢視程式的樹狀結構。總體來看,podman比docker要簡單。由於podman比docker少了一層daemon,因此重啟的機制也就不同了。
在使用者方面,podman與docker的命令基本相容,都包括容器執行時(run/start/kill/ps/inspect),本地映象(images/rmi/build)、映象倉庫(login/pull/push)等幾個方面。因此podman的命令列工具與docker類似,比如構建映象、啟停容器等。甚至可以透過alias docker=podman可以進行替換。因此,即便使用了podman,仍然可以使用docker.io作為映象倉庫,這也是相容性最關鍵的部分。
Podman常用命令
容器
映象
部署Podman
使用Podman
使用 Podman 非常的簡單,Podman 的指令跟 Docker 大多數都是相同的。下面我們來看幾個常用的例子:
執行一個容器
列出執行的容器
注意:如果在ps命令中新增-a,Podman 將顯示所有容器。
檢查正在執行的容器
您可以“檢查”正在執行的容器的後設資料和有關其自身的詳細資訊。我們甚至可以使用 inspect 子命令檢視分配給容器的 IP 地址。由於容器以無根模式執行,因此未分配 IP 地址,並且該值將在檢查的輸出中列為“無”。
注意:-l 是最新容器的便利引數。您還可以使用容器的 ID 代替 -l。
檢視一個執行中容器的日誌
檢視一個執行容器中的程式資源使用情況
可以使用top觀察容器中的 nginx pid
語法:
停止一個執行中的容器
刪除一個容器
以上這些特性基本上都和 Docker 一樣,Podman 除了相容這些特性外,還支援了一些新的特性。
上傳映象
例如,如果我們想在 docker.io 上分享我們新建的 Nginx 容器映象,這很容易。首先登入碼頭:
總而言之,Podman 使查詢、執行、構建和共享容器變得容易。
配置別名
如果習慣了使用 Docker 命令,可以直接給 Podman 配置一個別名來實現無縫轉移。你只需要在 .bashrc 下加入以下行內容即可:
使用者操作
在允許沒有root特權的使用者執行Podman之前,管理員必須安裝或構建Podman並完成以下配置。
cgroup V2Linux核心功能允許使用者限制普通使用者容器可以使用的資源,如果使用cgroupV2啟用了執行Podman的Linux發行版,則可能需要更改預設的OCI執行時。某些較舊的版本runc不適用於cgroupV2,必須切換到備用OCI執行時crun。
安裝slirp4netns和fuse-overlayfs
在普通使用者環境中使用Podman時,建議使用fuse-overlayfs而不是VFS檔案系統,至少需要版本0.7.6。現在新版本預設就是了。
/etc/subuid和/etc/subgid配置
Podman要求執行它的使用者在/etc/subuid和/etc/subgid檔案中列出一系列UID,shadow-utils或newuid包提供這些檔案
可以在/etc/subuid和/etc/subgid檢視,每個使用者的值必須唯一且沒有任何重疊。
這個檔案的格式是 USERNAME:UID:RANGE
中/etc/passwd或輸出中列出的使用者名稱getpwent。
為使用者分配的初始 UID。
為使用者分配的 UID 範圍的大小。
該usermod程式可用於為使用者分配 UID 和 GID,而不是直接更新檔案。
使用者配置檔案
三個主要的配置檔案是container.conf、storage.conf和registries.conf。使用者可以根據需要修改這些檔案。
container.conf
如果它們以該順序存在。每個檔案都可以覆蓋特定欄位的前一個檔案。
配置storage.conf檔案
在普通使用者中/etc/containers/storage.conf的一些欄位將被忽略
在普通使用者中這些欄位預設
registries.conf
配置按此順序讀入,這些檔案不是預設建立的,可以從/usr/share/containers或複製檔案/etc/containers並進行修改。
授權檔案
此檔案裡面寫了docker賬號的密碼,以加密方式顯示
普通使用者是無法看見root使用者的映象的
卷
容器與root使用者一起執行,則root容器中的使用者實際上就是主機上的使用者。
UID GID是在/etc/subuid和/etc/subgid等中使用者對映中指定的第一個UID GID。
如果普通使用者的身份從主機目錄掛載到容器中,並在該目錄中以根使用者身份建立檔案,則會看到它實際上是你的使用者在主機上擁有的。
使用卷
在主機上檢視
容器裡檢視
使用普通使用者對映容器埠時會報“ permission denied”的錯誤
普通使用者可以對映>= 1024的埠
配置echo ‘net.ipv4.ip_unprivileged_port_start=80’ >> /etc/sysctl.conf
後可以對映大於等於80的埠
來自 “ 碼農實戰 ”, 原文作者:碼農實戰;原文連結:https://view.inews.qq.com/a/20220424A02MUM00,如有侵權,請聯絡管理員刪除。
相關文章
- RHCE(podman容器)
- podman常用命令
- podman安裝和普通使用者使用podman的方式及podman常用命令
- 用 Podman Compose 管理容器
- docker(podman)容器設定中文環境Docker
- Docker 與 Podman 容器管理的比較Docker
- Linux常用命令總結Linux
- docker常用命令總結Docker
- Docker 常用命令總結Docker
- Kafka 常用命令總結Kafka
- node 常用命令總結
- Git常用命令總結Git
- 為什麼Podman執行容器更安全?
- Java 容器系列總結Java
- Spring boot常用命令總結Spring Boot
- linux總結及常用命令Linux
- console常用命令總結筆記筆記
- Linux 程式管理常用命令總結Linux
- 【Hadoop篇】--Hadoop常用命令總結Hadoop
- 無需sudo使用Podman在Linux上執行容器Linux
- Podman:一個更安全的執行容器的方式
- Android 常用開源庫總結(持續更新)Android
- Git常用命令總結(超實用)Git
- 2018年終總結之AI領域開源框架彙總AI框架
- Podman
- Redis | Redis常用命令及示例總結(API)RedisAPI
- 在 Fedora 中結合權能使用 Podman
- 關於STL容器的簡單總結
- 服務容器(自己總結)依賴注入依賴注入
- 【bpmn.js 使用總結】指定 Palette 容器JS
- 通俗易懂,JDK 併發容器總結JDK
- Java知識點總結(Java容器-List)Java
- Java知識點總結(Java容器-Vector)Java
- Java知識點總結(Java容器-Set)Java
- MySQL基礎知識和常用命令總結MySql
- Git 常用命令總結,將會持續更新Git
- conda 源設定方法總結
- 【Web總結】資源儲存Web