(转)Podman 新的一代Linux容器工具

原文:https://blog.csdn.net/weixin_40826349/article/details/103649769

一、简介

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

## Fedora,Centos
sudo yum -y install podman
## Arch Linux &amp; 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

# 拉取镜像

>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传输容器镜像。

原文地址:https://www.cnblogs.com/liujiacai/p/13629902.html