podman容器工具的具體使用

podman簡介

Podman是一個開源項目,可在大多數Linux平臺上使用並開源在GitHub上。Podman是一個無守護進程的容器引擎,用於在Linux系統上開發,管理和運行Open Container Initiative(OCI)容器和容器鏡像。Podman提供瞭一個與Docker兼容的命令行前端,它可以簡單地作為Docker cli,簡單地說你可以直接添加別名:alias docker = podman來使用podman。

Podman控制下的容器可以由root用戶運行,也可以由非特權用戶運行。Podman管理整個容器的生態系統,其包括pod,容器,容器鏡像,和使用libpod library的容器卷。Podman專註於幫助您維護和修改OCI容器鏡像的所有命令和功能,例如拉取和標記。它允許您在生產環境中創建,運行和維護從這些映像創建的容器。

官網:https://podman.io/
安裝文檔:https://github.com/containers/libpod/blob/master/install.md
配置參考:https://github.com/containers/image/blob/master/docs/containers-registries.conf.5.md

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安裝使用

使用centos官方yum源進行安裝

$ yum install -y podman
$ podman version
Version:            1.4.4
RemoteAPI Version:  1
Go Version:         go1.10.3
OS/Arch:            linux/amd64

配置鏡像加速

這裡使用阿裡雲鏡像加速器

cp /etc/containers/registries.conf{,.bak}

cat > /etc/containers/registries.conf << EOF
unqualified-search-registries = ["docker.io"]

[[registry]]
prefix = "docker.io"
location = "uyah70su.mirror.aliyuncs.com"
EOF

拉取鏡像

$ podman pull centos
Trying to pull docker.io/library/centos...Getting image source signatures
Copying blob 8ba884070f61 done
Copying config 9f38484d22 done
Writing manifest to image destination
Storing signatures
9f38484d220fa527b1fb19747638497179500a1bed8bf0498eb788229229e6e1

運行容器

$ podman images
REPOSITORY                 TAG      IMAGE ID       CREATED        SIZE
docker.io/library/centos   latest   9f38484d220f   4 months ago   209 MB
$ podman run -itd --name test centos sleep 3600
1fc033bb22096008049709d70869d54e3fa9e4d72c6d098f4b5601fd6747a9b9
$ podman ps
CONTAINER ID  IMAGE                            COMMAND     CREATED        STATUS            PORTS  NAMES
1fc033bb2209  docker.io/library/centos:latest  sleep 3600  7 seconds ago  Up 6 seconds ago         test

配置為別名

$ echo "alias docker=podman" >> .bashrc
$ source .bashrc

$ docker ps -a
CONTAINER ID  IMAGE                            COMMAND     CREATED        STATUS            PORTS  NAMES
1fc033bb2209  docker.io/library/centos:latest  sleep 3600  7 minutes ago  Up 7 minutes ago         test

相關工具

Buildah

Buildah專註於構建OCI鏡像。 Buildah的命令復制瞭Dockerfile中的所有命令。可以使用Dockerfiles構建鏡像,並且不需要任何root權限。 Buildah的最終目標是提供更低級別的coreutils界面來構建圖像。Buildah也支持非Dockerfiles構建鏡像,可以允許將其他腳本語言集成到構建過程中。 Buildah遵循一個簡單的fork-exec模型,不以守護進程運行,但它基於golang中的綜合API,可以存儲到其他工具中。雖然Podman也可以用戶構建Docker鏡像,單構建速度較慢。

Skopeo

Skopeo是一個工具,允許我們通過push,pull和復制鏡像來處理Docker和OC鏡像。

到此這篇關於podman容器工具的具體使用的文章就介紹到這瞭,更多相關podman使用內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: