Podman介绍

Podman介绍

1. 什么是Podman

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-l71vqhWu-1652096445390)(E:\App\Typora\Typora\picture\image-20220509145534764.png)]

Podman是RedHat的一款产品,旨在使用类似于Kubernetes的方法来构建、管理和运行容器,作为一款主流容器的可靠替代产品

Podman是一种开源的Linux原生工具,旨在根据开放容器倡议(Open Container Initiative,OCI)标准开发、管理和运行容器和Pod。Podman是RedHat开发的一个用户友好的容器调度器,是RedHat 8和CentOS 8中默认的容器引擎。

它是一款集合了命令集的工具,设计初衷是为了处理容器化进程的不同任务,可以作为一个模块化框架工作。它的工具集包括:

  • Podman:Pod和容器镜像管理器
  • Buildah:容器镜像生成器
  • Skopeo:容器镜像检查管理器
  • Runc:容器运行器和特性构建器,并传递给Podman和Buildah
  • Crun:可选运行时,为Rootless容器提供更大的灵活性、控制和安全性

Podman 官网地址:podman.io


2. Podman和Docker区别

Podman和Docker有许多共同的特性,但也有一些根本的区别。技术不分好坏,只是着重于哪个更适用于某些特定的场景

架构

Docker使用守护进程,一个正在后台运行的程序,来创建镜像和运行容器。Podman是无守护进程的架构,这意味着它可以在启动容器的用户下运行容器。Docker有一个由守护进程引导的客户端——服务器逻辑架构;但Podman不需要此类守护进程

root特权

由于Podman没有守护进程来管理其活动,也无需为其容器分配root特权。Docker最近在其守护进程配置中添加了rootless模式,但Podman首先使用了这种方法,并将其作为基本特性进行了推广

模块化

也许这就是这两种技术的关键区别:Docker是一个独立的、强大的工具,在整个循环中处理所有的容器化任务,有优点也有缺点。Podman采用模块化的方法,依靠专门的工具来完成特定的任务


3. Podman的使用

# 安装podman
[root@localhost ~]# dnf -y install podman

# 配置加速器
[root@localhost ~]# vim /etc/containers/registries.conf
#unqualified-search-registries = ["registry.fedoraproject.org", "registry.access.redhat.com", "registry.centos.org", "docker.io"]     #直接注释掉
unqualified-search-registries = ["docker.io"]
[[registry]]
prefix = "docker.io"
location = "j3m2itm3.mirror.aliyuncs.com"
# podman命令和docker命令类似
[root@localhost ~]# podman run -d --rm httpd docker.io/library/httpd
Resolving "httpd" using unqualified-search registries (/etc/containers/registries.conf)
Trying to pull docker.io/library/httpd:latest...
Getting image source signatures
Copying blob dcc4698797c8 done  
Copying blob d982c879c57e done  
Copying blob 67283bbdd4a0 done  
Copying blob 41c22baa66ec done  
Copying blob a2abf6c4d29d done  
Copying config dabbfbe0c5 done  
Writing manifest to image destination
Storing signatures
9a494aacd1f523d7455d5d78c89272986837db239d30b1c41621603b0ded184c

[root@localhost ~]# podman images
REPOSITORY               TAG         IMAGE ID      CREATED       SIZE
docker.io/library/httpd  latest      dabbfbe0c57b  4 months ago  148 MB

[root@localhost ~]# podman ps
CONTAINER ID  IMAGE                           COMMAND           CREATED        STATUS            PORTS       NAMES
9a494aacd1f5  docker.io/library/httpd:latest  httpd-foreground  6 minutes ago  Up 6 minutes ago              beautiful_chebyshev

[root@localhost ~]# podman inspect --latest |grep IPAddress		// -latest(最近的)
            "IPAddress": "10.88.0.2",
                    "IPAddress": "10.88.0.2",
[root@localhost ~]# 
[root@localhost ~]# curl 10.88.0.2
<html><body><h1>It works!</h1></body></html>

[root@localhost ~]# podman top -l
USER        PID         PPID        %CPU        ELAPSED           TTY         TIME        COMMAND
root        1           0           0.000       21m48.331055545s  ?           0s          httpd -DFOREGROUND 
www-data    7           1           0.000       21m47.331132862s  ?           0s          httpd -DFOREGROUND 
www-data    8           1           0.000       21m47.331187634s  ?           0s          httpd -DFOREGROUND 
www-data    9           1           0.000       21m47.331254416s  ?           0s          httpd -DFOREGROUND

在允许没有root特权的用户运行Podman之前,管理员必须安装或构建Podman并完成以下配置

需要更改默认的OCI运行时。某些较旧的版本runc不适用于cgroupV2,必须切换到备用OCI运行时crun

[root@localhost ~]# dnf -y install crun

[root@localhost ~]# vim /usr/share/containers/containers.conf
# Default OCI runtime
#
runtime = "crun"		//此行取消注释
#runtime = "runc"		//注释此行

# 在普通用户环境中使用Podman时,建议使用fuse-overlayfs而不是VFS文件系统,至少需要版本0.7.6
[root@localhost ~]# vim /etc/containers/storage.conf
mount_program = "/usr/bin/fuse-overlayfs"	//取消注释

[root@localhost ~]# useradd tom
[root@localhost ~]# id tom
uid=1000(tom) gid=1000(tom) groups=1000(tom)

# 查看容器内用户的id
[root@localhost ~]# cat /etc/subuid
tom:100000:65536
[root@localhost ~]# cat /etc/subgid
tom:100000:65536

# 用于为用户分配UID和GID
[root@localhost ~]# vim /etc/sysctl.conf
net.ipv4.ping_group_range=0 200000
[root@localhost ~]# sysctl -p
net.ipv4.ping_group_range = 0 200000

  • 容器与root用户一起运行,则root容器中的用户实际上就是主机上的用户。
  • UID GID是在/etc/subuid和/etc/subgid等中用户映射中指定的第一个UID GID。
  • 如果普通用户的身份从主机目录挂载到容器中,并在该目录中以根用户身份创建文件,则会看到它实际上是你的用户在主机上拥有的
# 切换用户
[root@localhost ~]# su - tom
Last login: Mon May  9 17:23:58 CST 2022 on pts/0
[tom@localhost ~]$ mkdir data
[tom@localhost ~]$ ll
total 0
drwxrwxr-x 2 tom tom 6 May  9 17:50 data
[tom@localhost ~]$ 
[tom@localhost ~]$ echo 'hello world' > data/abc
[tom@localhost ~]$ podman run -it --rm -v $(pwd)/data:/data:Z busybox /bin/sh
Resolved "busybox" as an alias (/etc/containers/registries.conf.d/000-shortnames.conf)
Trying to pull docker.io/library/busybox:latest...
Getting image source signatures
Copying blob 5cc84ad355aa done  
Copying config beae173cca done  
Writing manifest to image destination
Storing signatures
/ # 
/ # id
uid=0(root) gid=0(root) groups=10(wheel)
/ # 
/ # ls -l data/
total 4
-rw-rw-r--    1 root     root            12 May  9 09:56 abc
/ # 
/ # cd data/
/data #
/data # cat abc 
hello world
/data #
/data # exit

# 让容器的root改为tom
[tom@localhost ~]$ podman run -it --rm -v $(pwd)/data:/data:Z --userns=keep-id busybox /bin/sh
~ $ 
~ $ id
uid=1000(tom) gid=1000(tom)
~ $ 
~ $ ls -l /data/
total 4
-rw-rw-r--    1 tom      tom             12 May  9 09:56 abc
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值