原文: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不同之处?
docker需要在我们的系统上运行一个守护进程(docker daemon),而Podman不需要
启动容器的方式不同:
docker cli
命令通过API跟Docker Engine(引擎)
交互告诉它我想创建一个container,然后docker Engine
才会调用OCI container runtime(runc)
来启动一个container。这代表container的process(进程)不会是Docker CLI
的child process(子进程)
,而是Docker Engine
的child process
。Podman
是直接给OCI containner runtime(runc)
进行交互来创建container的,所以container process
直接是podman
的child process
。因为docke有docker daemon,所以docker启动的容器支持
--restart
策略,但是podman不支持,如果在k8s中就不存在这个问题,我们可以设置pod的重启策略,在系统中我们可以采用编写systemd服务来完成自启动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 & 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传输容器镜像。