Podman 新的一代Linux容器工具

一、簡介

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容器鏡像的所有命令和功能,例如拉取和標記。它允許您在生產環境中創建,運行和維護從這些映像創建的容器。

Podman 官網地址:https://podman.io/

Podman 項目地址:https://github.com/containers/libpod

二、Podman和docker不同之處?

  1. docker需要在我們的系統上運行一個守護進程(docker daemon),而Podman不需要

  2. 啓動容器的方式不同:

    docker cli 命令通過API跟 Docker Engine(引擎)交互告訴它我想創建一個container,然後docker Engine纔會調用OCI container runtime(runc)來啓動一個container。這代表container的process(進程)不會是Docker CLIchild process(子進程),而是Docker Enginechild process
    Podman是直接給OCI containner runtime(runc)進行交互來創建container的,所以container process直接是podmanchild process

  3. 因爲docke有docker daemon,所以docker啓動的容器支持--restart策略,但是podman不支持,如果在k8s中就不存在這個問題,我們可以設置pod的重啓策略,在系統中我們可以採用編寫systemd服務來完成自啓動

  4. docker需要使用root用戶來創建容器,但是podman不需要

三、Podman安裝

## Fedora,Centos
sudo yum -y install podman
## Arch Linux & Manjaro Linux
sudo pacman -S podman
## Gentoo
sudo emerge app-emulation/libpod
## MacOS
brew cask install podman#
podman version

## 配置阿里雲鏡像
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 cli介紹

Podman CLI 裏面87%的指令都和DOcker CLI 相同,官方給出了這麼個例子alias docker=podman,所以說經常使用DOcker CLI的人使用podman上手非常快

五、案例

# 拉取鏡像
> podman pull redis
Copying blob 76e034b0f296 skipped: already exists
Copying blob 000eee12ec04 skipped: already exists
Copying blob 5cc53381c195 skipped: already exists
Copying blob 48bb7bcb5fbf skipped: already exists
Copying blob ef8a890bb1c2 skipped: already exists
Copying blob 32ada9c6fb0d skipped: already exists
Copying config dcf9ec9265 done
Writing manifest to image destination
Storing signatures
dcf9ec9265e0d943152be903f573d9bea66d648f9cc65f6e6f26eb978d16e6c4
# 查看本地鏡像
> podman images
REPOSITORY                 TAG      IMAGE ID       CREATED        SIZE
docker.io/library/redis    latest   dcf9ec9265e0   4 weeks ago    102 MB
# 運行容器
> podman run -d -p 6379:6379 --name redis redis redis-server --appendonly yes
5485ba8457faaee33a1bf85c099c797443f6d36c7f97e5dd56a8de4047de864b
# 查看運行的容器
> podman ps
CONTAINER ID  IMAGE                           COMMAND               CREATED         STATUS             PORTS                   NAMES
5485ba8457fa  docker.io/library/redis:latest  docker-entrypoint...  38 seconds ago  Up 37 seconds ago  0.0.0.0:6379->6379/tcp  redis
# 進入容器
> podman exec -it redis /bin/bash
# 停止容器
> podman stop redis
# 啓動容器
> podman start redis
# 刪除容器及刪除鏡像
> podman rm redis
> podman rmi redis

## docker使用習慣的,可配置別名
> echo "alias docker=podman" >> .bashrc
> source .bashrc
> docker ps -a

# 更多可參考官方文檔及docker使用,常用命令87%與docker相似 
> podman -help

相關工具

1.Buildah

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

2.Skopeo

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

Buildah構建容器,Podman運行容器,Skopeo傳輸容器鏡像。

發佈了104 篇原創文章 · 獲贊 35 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章