podman与docker的区别
podman(Pod Manager)是一个由RedHat公司推出的容器管理工具,它的定位就是docker的替代品,在使用上与docker的体验类似。 podman源于CRI-O项目,可以直接访问OCI的实现(如runC),流程比docker要短。 二者主要的区别在于,podman是一个开源的产品;而docker已经是商业化的产品。 podman的开源代码,由RedHat的OpenShift项目维护。 podman.io上面的文档还不算很健全,作为普通开发者,将其当成docker去用,难度也不算很大。
安装
# redhat8安装
yum module enable -y container-tools:rhel8
yum module install -y container-tools:rhel8
[root@localhost ~]# yum -y install podman
[root@localhost ~]# rpm -qa | grep podman
podman-1.6.4-29.el7_9.x86_64
#定义别名
[root@localhost ~]# alias docker=podman
[root@localhost ~]# podman images
REPOSITORY TAG IMAGE ID CREATED SIZE
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
普通用户使用podman
在允许没有root特权的用户运行podman之前,管理员必须需要安装或构件podman并完成以下配置
在允许没有特殊权限的用户运行podman之前,管理员必须需要安装或构件podman并完成以下配置
cgroup V2Linux内核功能允许用户限制普通用户容器可以使用的资源,如果使用cgroup V2启用了运行Podman的Linux发行版,则可能需要更改默认的OCI运行时。某些较旧的版本runc不适用于cgroup V2,必须切换到备用OCI运行时crun。
[root@localhost ~]# cd /etc/containers/
[root@localhost containers]# vim storage.conf
[storage.options]
# Storage options to be passed to underlying storage drivers
mount_program = "/usr/bin/fuse-overlayfs"
···
additionalimagestores = [
mount_program="/sru/bin/fuse-overlayfs"
]
#安装crun包
[root@localhost ~]# yum -y install crun
[root@localhost ~]# vim /usr/share/containers/containers.conf #修改如下
448 runtime = "crun"
449 #runtime = "runc"
[root@localhost containers]# sysctl user.max_user_namespaces=15000 #RHEL7上需要做此操作,8不需要做
[root@localhost containers]# useradd tom #创建用户之后会在此文件自动生成此内容
[root@localhost containers]# cat /etc/subuid
tom:100000:65536
// 启动非特权ping
[root@localhost containers]# sysctl -w "net.ipv4.ping_group_range=0 200000" #大于100000这个就表示tom可以操作podman
net.ipv4.ping_group_range = 0 200000
// 用户配置文件
[root@localhost containers]# cat /usr/share/containers/containers.conf
[root@localhost containers]# cat /etc/containers/containers.conf
[root@localhost ~]# cat ~/.config/containers/containers.conf #优先级最高
[root@localhost containers]# cat /run/user/0/containers/auth.json #此文件里面写了docker账号的密码,以加密方式显示
[tom@localhost ~]$ podman images
ERRO[0000] XDG_RUNTIME_DIR directory "/run/user/0" is not owned by the current user
// 解决
[root@localhost ~]# chown -R tom.tom /run/user/0/
[tom@localhost ~]$ podman images
REPOSITORY TAG IMAGE ID CREATED SIZE
常用命令
查看帮助
# 查看帮助文档
[root@localhost ~]# podman --help
manage pods and images
Usage:
podman [flags]
podman [command]
······
#查看帮助手册
[root@localhost ~]# man podman
查找镜像
[root@localhost ~]# podman search httpd
INDEX NAME DESCRIPTION AUTOMATED
redhat.com registry.access.redhat.com/rhscl/httpd-24-rhel7 Apache HTTP 2.4 Server
// --filter=is-official #查找官方版本
[root@localhost ~]# podman search httpd --filter=is-official
INDEX NAME DESCRIPTION STARS OFFICIAL AUTOMATED
docker.io docker.io/library/httpd The Apache HTTP Server Project 3794 [OK]
下载镜像
#拉取镜像,建议使用完整镜像名称(docker.io/library/httpd而不是httpd)来确保使用正确的镜像
[root@localhost ~]# podman pull docker.io/library/busybox
Trying to pull docker.io/library/busybox...
Getting image source signatures
Copying blob 3cb635b06aa2 done
Copying config ffe9d497c3 done
Writing manifest to image destination
Storing signatures
ffe9d497c32414b1c5cdad8178a85602ee72453082da2463f1dede592ac7d5af
显示所有镜像
[root@localhost ~]# podman images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/library/busybox latest ffe9d497c324 6 days ago 1.46 MB
运行容器
注:我们使用端口转发来访问HTTP服务器。要成功运行,至少需要 slirp4netns v0.3.0。
[root@localhost ~]# podman run -d docker.io/library/busybox
8cee5f783249edcafe0844a1aea745e4ed963a5968f7c2e3fe72fe6f7d18774f
列出容器
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
13aeb44ac619 docker.io/library/busybox:latest sh 47 seconds ago Up 46 seconds ago admiring_torvalds
# 当加上-a选项会列出所有容器
显示容器信息
-l:查看最新信息(最新的信息以最新的时间来定义)
您可以"检查"正在运行的容器,以查找有关其自身的元数据和详细信息。 将提供许多有用的信息,如环境变量,网络设置或分配的资源。podman inspect
由于容器在无根模式下运行,因此不会为容器分配 IP 地址。
[root@localhost ~]# podman inspect 13aeb44ac619
[
{
"Id": "13aeb44ac6194d8755236dd5befe5a4914d1ee2e71e9918ebee1aa62098c3013",
"Created": "2021-12-14T19:00:27.839913953+08:00",
"Path": "sh",
"Args": [
"sh"
],
······
查看容器日志
[root@localhost ~]# podman logs 13aeb44ac619
查看容器pid
[root@localhost ~]# podman top 13aeb44ac619
USER PID PPID %CPU ELAPSED TTY TIME COMMAND
root 1 0 0.000 3m42.512950836s pts/0 0s sh