Podman安装和使用

柯默
2023-12-01

安装podman

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

podman使用

  • podman search
[root@192 ~]# podman search busybox
INDEX       NAME                               DESCRIPTION                                      STARS       OFFICIAL    AUTOMATED
docker.io   docker.io/library/busybox          Busybox base image.                              2415        [OK]        
docker.io   docker.io/radial/busyboxplus       Full-chain, Internet enabled, busybox made f...  43                      [OK]
docker.io   docker.io/yauritux/busybox-curl    Busybox with CURL                                16                      
......
和docker不同的是镜像会跟上仓库的位置
  • 运行一个容器
[root@192 ~]# podman run -it docker.io/library/busybox /bin/sh
Trying to pull docker.io/library/busybox:latest...
Getting image source signatures
Copying blob 3cb635b06aa2 done  
Copying config ffe9d497c3 done  
Writing manifest to image destination
Storing signatures
/ # 
  • 构建一个容器
//使用由 Nginx 维护并在 GitHub 上发布的 Dockerfile构建 Nginx Web 服务器

[root@192 ~]#podman build -t nginx https://git.io/Jf8ol
//此处的https://git.io/Jf8ol已失效,根据自己需求自行查找可用的dockerfile所在网址
  • 查看镜像
[root@192 ~]# podman images
REPOSITORY                 TAG         IMAGE ID      CREATED      SIZE
docker.io/library/busybox  latest      ffe9d497c324  6 days ago   1.46 MB
docker.io/library/nginx    latest      f652ca386ed1  11 days ago  146 MB
  • 上传镜像
//登录
[root@192 ~]# docker login docker.io
-bash: docker: command not found
[root@192 ~]# podman login docker.io
Username:          //用户名
Password:           //密码
Login Succeeded!         //登录成功

//上传镜像
[root@192 ~]# podman push docker.io/soumnswa/nginx:latest 
  • 运行实例容器
podman run -dt -p 8080:8080/tcp -e HTTPD_VAR_RUN=/run/httpd -e HTTPD_MAIN_CONF_D_PATH=/etc/httpd/conf.d \ 
                  -e HTTPD_MAIN_CONF_PATH=/etc/httpd/conf \ 
                  -e HTTPD_CONTAINER_SCRIPTS_PATH= share/container-scripts/httpd/\ 
                  registry.fedoraproject.org/f29/httpd /usr/bin/run-httpd
  • 查看运行的容器
[root@192 ~]# podman ps 
CONTAINER ID  IMAGE                           COMMAND               CREATED        STATUS            PORTS       NAMES
92c525f14f51  docker.io/library/nginx:latest  nginx -g daemon o...  7 seconds ago  Up 7 seconds ago              nginx

//列出所有的容器
[root@192 ~]# podman ps -a
CONTAINER ID  IMAGE                             COMMAND               CREATED             STATUS                           PORTS       NAMES
94cdaee9ae24  docker.io/library/busybox:latest  /bin/sh               36 minutes ago      Exited (0) 23 minutes ago                    keen_lewin
96922be7b5f3  docker.io/library/nginx:latest    --name nginx          About a minute ago  Exited (127) About a minute ago              laughing_poincare
92c525f14f51  docker.io/library/nginx:latest    nginx -g daemon o...  About a minute ago  Up About a minute ago                        nginx
  • 检查正在运行的容器
    -l 是最新容器的便利参数。您还可以使用容器的 ID 代替 -l
[root@192 ~]# podman inspect -l | grep IPAddress\":
            "IPAddress": "10.88.0.4",
                    "IPAddress": "10.88.0.4",

//尝试访问
[root@192 ~]# curl 10.88.0.4
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
html { color-scheme: light dark; }
body { width: 35em; margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif; }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>
  • 查看容器日志
    如果同时有多个容器再运行,使用–latest可以查看最后一个启动的容器的信息
//多次访问刚才创建的nginx,查看日志
[root@192 ~]# podman logs --latest
......
10.88.0.1 - - [14/Dec/2021:02:12:49 +0000] "GET / HTTP/1.1" 200 615 "-" "curl/7.61.1" "-"
10.88.0.1 - - [14/Dec/2021:02:15:32 +0000] "GET / HTTP/1.1" 200 615 "-" "curl/7.61.1" "-"
10.88.0.1 - - [14/Dec/2021:02:15:33 +0000] "GET / HTTP/1.1" 200 615 "-" "curl/7.61.1" "-"
10.88.0.1 - - [14/Dec/2021:02:15:34 +0000] "GET / HTTP/1.1" 200 615 "-" "curl/7.61.1" "-"
10.88.0.1 - - [14/Dec/2021:02:15:35 +0000] "GET / HTTP/1.1" 200 615 "-" "curl/7.61.1" "-"
10.88.0.1 - - [14/Dec/2021:02:15:37 +0000] "GET / HTTP/1.1" 200 615 "-" "curl/7.61.1" "-"
10.88.0.1 - - [14/Dec/2021:02:15:38 +0000] "GET / HTTP/1.1" 200 615 "-" "curl/7.61.1" "-"
10.88.0.1 - - [14/Dec/2021:02:15:38 +0000] "GET / HTTP/1.1" 200 615 "-" "curl/7.61.1" "-"
......
  • 查看容器的pid
[root@192 ~]# podman top nginx
USER        PID         PPID        %CPU        ELAPSED           TTY         TIME        COMMAND
root        1           0           0.000       10m27.250435533s  ?           0s          nginx: master process nginx -g daemon off; 
nginx       31          1           0.000       10m27.25073244s   ?           0s          nginx: worker process 
nginx       32          1           0.000       10m27.25077622s   ?           0s          nginx: worker process 
nginx       33          1           0.000       10m27.250814806s  ?           0s          nginx: worker process 
nginx       34          1           0.000       10m27.25087097s   ?           0s          nginx: worker process 
  • 停止容器
//--latest停止最近启动的容器
[root@192 ~]# podman ps 
CONTAINER ID  IMAGE                           COMMAND               CREATED         STATUS             PORTS       NAMES
92c525f14f51  docker.io/library/nginx:latest  nginx -g daemon o...  16 minutes ago  Up 16 minutes ago              nginx
[root@192 ~]# podman stop --latest 
92c525f14f51e4518c19699cd624a8be19862e8df499a0f0d5996f390f737b0c
  • 删除容器
[root@192 ~]# podman ps -a 
CONTAINER ID  IMAGE                             COMMAND               CREATED         STATUS                     PORTS       NAMES
94cdaee9ae24  docker.io/library/busybox:latest  /bin/sh               54 minutes ago  Exited (0) 41 minutes ago              keen_lewin
92c525f14f51  docker.io/library/nginx:latest    nginx -g daemon o...  19 minutes ago  Exited (0) 2 minutes ago               nginx

//--latest删除最近的容器
[root@192 ~]# podman rm --latest
92c525f14f51e4518c19699cd624a8be19862e8df499a0f0d5996f390f737b0c

普通用户使用podman

在允许没有 root 权限的用户运行 Podman 之前,管理员必须安装或构建 Podman 并完成以下配置。
cgroup V2 Linux 内核功能允许用户限制无根容器可以使用的资源量。如果您运行 Podman 的 Linux 发行版启用了 cgroup V2,那么您可能需要更改默认的 OCI 运行时。一些旧版本runc不能与 cgroup V2 一起使用,您可能必须切换到替代的 OCI 运行时crun。

安装slirp4netns和fuse-overlayfs

slirp4nets包为普通用户提供一种网络模式
在普通用户环境中使用Podman时,建议使用fuse-overlayfs而不是VFS文件系统

[root@localhost ~]# yum -y install slirp4netns
[root@localhost ~]# yum -y install fuse-overlayfs

如果在fuse-overlayfs安装之前使用了Podman ,可能需要调整storage.conf文件(参见下面的“用户配置文件”),将todriver下的选项[storage]改为"overlay"并将mount_program选项指向可执行文件[storage.options]的路径fuse-overlayfs:

[root@192 containers]# pwd 
/etc/containers
[root@192 containers]# vim storage.conf 
......
[storage]
  driver = "overlay"

  (...)

[storage.options]

  (...)

  mount_program = "/usr/bin/fuse-overlayfs"
  ......

/etc/subuid和/etc/subgid配置

对于将被允许创建容器,更新每一个用户/etc/subuid,并/etc/subgid与看起来像以下字段用户。请注意,每个用户的值必须是唯一的。如果存在重叠,用户就有可能使用另一个用户的命名空间,并且他们可能会破坏它。

[root@192 ~]# useradd tom 
[root@192 ~]# cat /etc/subuid
tom:100000:65536

[root@192 ~]# useradd jerry
[root@192 ~]# cat /etc/subuid
tom:100000:65536
jerry:165536:65536

这个文件的格式是 USERNAME:UID:RANGE

  • /etc/passwd或getpwent输出中列出的用户名
  • 为用户分配的初始 UID
  • 为用户分配的 UID 范围的大小

usermod程序可以用来为用户分配uid和GID,而不是直接更新文件。

usermod --add-subuids 200000-201000 --add-subgids 200000-201000 johndoe
grep johndoe /etc/subuid /etc/subgid
/etc/subuid:johndoe:200000:1001
/etc/subgid:johndoe:200000:1001

启用非特权 ping

在非特权容器中运行的用户可能无法使用该ping容器中的实用程序。

如果需要,管理员必须验证用户的 UID 是否在/proc/sys/net/ipv4/ping_group_range文件范围内。

要改变它的值,管理员可以使用类似的电话:sysctl -w “net.ipv4.ping_group_range=0 2000000”。

[root@192 ~]# cat /etc/subuid
tom:100000:65536
jerry:165536:65536

[root@192 ~]# sysctl -w "net.ipv4.ping_group_range=0 2000000"
net.ipv4.ping_group_range = 0 2000000

用户操作

在无根环境中运行 Podman 所需的大部分工作都由机器管理员承担。

一旦管理员完成了机器上的设置,然后在/etc/subuid和/etc/subgid中完成了用户的配置,用户就可以开始使用他们想要的任何 Podman 命令。

用户配置文件

根驻留在Podman配置文件/usr/share/containers与覆盖/etc/containers。在无根环境中,它们驻留在${XDG_CONFIG_HOME}/containers(通常~/.config/containers)中并由每个单独的用户拥有。

三个主要的配置文件是container.conf、storage.conf和registries.conf。用户可以根据需要修改这些文件。

Podman 阅读

  • /usr/share/containers/containers.conf
  • /etc/containers/containers.conf
  • $HOME/.config/containers/containers.conf

如果它们以该顺序存在。每个文件都可以覆盖特定字段的前一个文件。$HOME/.config/containers/containers.conf优先级最高

存储配置文件

  • /etc/containers/storage.conf
  • $HOME/.config/containers/storage.conf

$HOME/.config/containers/storage.conf优先级高于/etc/containers/storage.conf

登记处registries.conf
优先级按以下顺序排列,依次升高

  • /etc/containers/registries.conf
  • /etc/containers/registries.d/*
  • HOME/.config/containers/registries.conf

主目录中的文件应该用于根据个人需要配置无根 Podman。默认情况下不会创建这些文件。用户可以从中复制/usr/share/containers或/etc/containers修改文件。

使用volumes

如果您的容器以 root 用户运行,那么root在容器中实际上是您在主机上的用户。UID / GID 是第一个UID / GID在用户在地图中指定/etc/subuid和/etc/subgid等,如果你安装来自主机的目录放入容器中作为一个无根的用户,并在容器中创建该目录中的文件作为根,你会看到它实际上由您的用户在主机上拥有。

//切换为普通用户
[root@192 ~]# su - tom 
[tom@192 ~]$ podman images
REPOSITORY  TAG         IMAGE ID    CREATED     SIZE
普通用户无法查看管理员上的镜像,每个用户也无法查看其他用户的镜像,相互不影响

[tom@192 ~]$ mkdir data
[tom@192 ~]$ ll
total 0
drwxrwxr-x. 2 tom tom 6 Dec 14 11:16 data

[tom@192 ~]$ podman run -it -v ~/data:/data docker.io/library/busybox /bin/shTrying to pull docker.io/library/busybox:latest...
Getting image source signatures
Copying blob 3cb635b06aa2 done  
Copying config ffe9d497c3 done  
Writing manifest to image destination
Storing signatures
/ # ls 
bin   data  dev   etc   home  proc  root  run   sys   tmp   usr   var
/ # cd /data/
/data # touch test
/data # ls -l
-rw-r--r--    1 root root 0 Dec 14 11:22 test


[tom@192 data]$ ll
total 0
-rw-rw-r--. 1 tom tom 0 Dec 14 11:19 teste
 类似资料: