Contents

Podman

Contents

Podman

参考连接:http://www.yunweipai.com/40798.html

Podman 是一个开源的容器运行时项目,可在大多数 Linux 平台上使用。Podman 提供与 Docker 非常相似的功能。正如前面提到的那样,它不需要在你的系统上运行任何守护进程,并且它也可以在没有 root 权限的情况下运行。

Podman 可以管理和运行任何符合 OCI(Open Container Initiative)规范的容器和容器镜像。Podman 提供了一个与 Docker 兼容的命令行前端来管理 Docker 镜像

podman是什么

​ podman系列主要包含三个命令podman、buildah、skopeo,其中podman本身负责运行、停止、管理容器,buildah负责构建容器镜像、skopeo负责与remote repo交互,拉取或推送镜像。但我们使用时不必这么麻烦,redhat为了方便用户从docker迁移到podman,在podman上几乎实现了大多数docker的常用命令,podman会替你转调buildah和skopeo,你甚至可以直接 alias docker=podman,然后像使用docker一样使用podman。

Podman

​ Podman可以替换Docker中了大多数子命令(RUN,PUSH,PULL等)。Podman不需要守护进程,而是使用用户命名空间来模拟容器中的root,无需连接到具有root权限的套接字保证容器的体系安全。Podman专注于维护和修改OCI镜像的所有命令和功能,例如拉动和标记。它还允许我们创建,运行和维护从这些图像创建的容器。

Buildah

​ Buildah用来构建OCI图像。虽然Podman也可以用户构建Docker镜像,但是构建速度超慢,并且默认情况下使用vfs存储驱动程序会耗尽大量磁盘空间。 buildah bud(使用Dockerfile构建)则会非常快,并使用覆盖存储驱动程序。Buildah专注于构建OCI镜像。 Buildah的命令复制了Dockerfile中的所有命令。可以使用Dockerfiles构建镜像,并且不需要任何root权限。 Buildah的最终目标是提供更低级别的coreutils界面来构建图像。Buildah也支持非Dockerfiles构建镜像,可以允许将其他脚本语言集成到构建过程中。 Buildah遵循一个简单的fork-exec模型,不以守护进程运行,但它基于golang中的综合API,可以存储到其他工具中。

Skopeo

​ Skopeo是一个工具,允许我们通过推、拉和复制镜像来处理Docker和OC镜像。

使用

1)安装

[root@dev ~]# yum -y install podman

2、配置镜像加速

podman的配置文件

# 配置镜像像仓库
[root@dev ~]# vim /etc/containers/registries.conf

# 取消从默认地址搜索的仓库域名
#unqualified-search-registries = ["registry.fedoraproject.org", "registry.access.redhat.com", "docker.io", "quay.io"]
unqualified-search-registries = ["docker.io"]

# 自定义搜索器
[[registry]]
# 仓库前缀
prefix = "docker.io"
# 加速器地址
location = "hub.local.com"


# 镜像别名
[root@localhost containers]# ls registries.conf.d/
000-shortnames.conf  001-rhel-shortnames.conf  002-rhel-shortnames-overrides.conf



# 配置镜像仓库和运行时目录
[root@localhost containers]# vim storage.conf 

[storage]

# Default Storage Driver, Must be set for proper operation.
driver = "overlay"

# root 用户运行时目录
# Temporary storage location
runroot = "/run/containers/storage"

# Primary Read/Write location of container storage
# When changing the graphroot location on an SELINUX system, you must
# ensure  the labeling matches the default locations labels with the
# following commands:
# semanage fcontext -a -e /var/lib/containers/storage /NEWSTORAGEPATH
# restorecon -R -v /NEWSTORAGEPATH
# root 用户镜像仓库目录
graphroot = "/var/lib/containers/storage"
# Storage path for rootless users
#
# rootless_storage_path = "$HOME/.local/share/containers/storage"

3、podman常用命令

容器

podman run         #创建并启动容器  
podman start       #启动容器  
podman ps          #查看容器  
podman stop        #终止容器  
podman restart     #重启容器  
podman attach      #进入容器  
podman exec        #进入容器  
podman export      #导出容器  
podman import      #导入容器快照  
podman rm          #删除容器  
podman logs        #查看日志  

镜像

podman search             #检索镜像  
docke pull                #获取镜像  
podman images             #列出镜像  
podman image Is           #列出镜像  
podman rmi                #删除镜像  
podman image rm           #删除镜像  
podman save               #导出镜像  
podman load               #导入镜像  
podmanfile                #定制镜像(三个)  
    podman build              #构建镜像  
    podman run              #运行镜像  
    podmanfile              #常用指令(四个)  
        COPY                    #复制文件  
        ADD                     #高级复制  
        CMD                     #容器启动命令  
        ENV                     #环境变量  
        EXPOSE                  #暴露端口  

4、使用podman

使用 Podman 非常的简单,Podman 的指令跟 Docker 大多数都是相同的。下面我们来看几个常用的例子:

[root@localhost ~]# podman run -d --name httpd docker.io/library/httpd  
Trying to pull docker.io/library/httpd...  
Getting image source signatures  
Copying blob e5ae68f74026 done    
Copying blob d3576f2b6317 done    
Copying blob bc36ee1127ec done    
Copying blob f1aa5f54b226 done    
Copying blob aa379c0cedc2 done    
Copying config ea28e1b82f done    
Writing manifest to image destination  
Storing signatures  
0492e405b9ecb05e6e6be1fec0ac1a8b6ba3ff949df259b45146037b5f355035  

//查看镜像  
[root@localhost ~]# podman images  
REPOSITORY                  TAG      IMAGE ID       CREATED       SIZE  
docker.io/library/httpd     latest   ea28e1b82f31   11 days ago   148 MB  

[root@localhost ~]# podman ps  
CONTAINER ID  IMAGE                             COMMAND           CREATED             STATUS                 PORTS  NAMES  
0492e405b9ec  docker.io/library/httpd:latest    httpd-foreground  About a minute ago  Up About a minute ago         httpd  

查看容器里的进程

[root@localhost ~]# podman top httpd  
USER       PID   PPID   %CPU    ELAPSED            TTY   TIME   COMMAND  
root       1     0      0.000   15m38.599711321s   ?     0s     httpd -DFOREGROUND   
www-data   7     1      0.000   15m38.599783256s   ?     0s     httpd -DFOREGROUND   
www-data   8     1      0.000   15m38.599845342s   ?     0s     httpd -DFOREGROUND   
www-data   9     1      0.000   15m38.599880444s   ?     0s     httpd -DFOREGROUND  

停止容器,删除

[root@localhost ~]# podman stop --latest  
2f3edf712621d3a41e03fa8c7f6a5cdba56fbbad43a7a59ede26cc88f31006c4  
[root@localhost ~]# podman ps  
CONTAINER ID  IMAGE  COMMAND  CREATED  STATUS  PORTS  NAMES  

[root@localhost ~]# podman rm --latest  
2f3edf712621d3a41e03fa8c7f6a5cdba56fbbad43a7a59ede26cc88f31006c4  
[root@localhost ~]# podman ps -a  
CONTAINER ID  IMAGE  COMMAND  CREATED  STATUS  PORTS  NAMES  

创建systemd服务

[root@localhost ~]# podman generate systemd nginx > /etc/systemd/system/nginx-docker.service
[root@localhost ~]# cat /etc/systemd/system/nginx-docker.service
# container-26ce342439d6ca634e209711b12fd0653537912bdd0351800a293a7900967237.service
# autogenerated by Podman 4.0.2
# Fri Apr 22 15:44:38 CST 2022

[Unit]
Description=Podman container-26ce342439d6ca634e209711b12fd0653537912bdd0351800a293a7900967237.service
Documentation=man:podman-generate-systemd(1)
Wants=network-online.target
After=network-online.target
RequiresMountsFor=/run/containers/storage

[Service]
Environment=PODMAN_SYSTEMD_UNIT=%n
Restart=on-failure
TimeoutStopSec=70
ExecStart=/usr/bin/podman start 26ce342439d6ca634e209711b12fd0653537912bdd0351800a293a7900967237
ExecStop=/usr/bin/podman stop -t 10 26ce342439d6ca634e209711b12fd0653537912bdd0351800a293a7900967237
ExecStopPost=/usr/bin/podman stop -t 10 26ce342439d6ca634e209711b12fd0653537912bdd0351800a293a7900967237
PIDFile=/run/containers/storage/overlay-containers/26ce342439d6ca634e209711b12fd0653537912bdd0351800a293a7900967237/userdata/conmon.pid
Type=forking

[Install]
WantedBy=default.target


[root@localhost ~]# systemctl daemon-reload
[root@localhost ~]# systemctl enable nginx-docker