[root@192 ~]# yum -y install podman
[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
[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>
//多次访问刚才创建的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" "-"
......
[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
在允许没有 root 权限的用户运行 Podman 之前,管理员必须安装或构建 Podman 并完成以下配置。
cgroup V2 Linux 内核功能允许用户限制无根容器可以使用的资源量。如果您运行 Podman 的 Linux 发行版启用了 cgroup V2,那么您可能需要更改默认的 OCI 运行时。一些旧版本runc不能与 cgroup V2 一起使用,您可能必须切换到替代的 OCI 运行时crun。
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与看起来像以下字段用户。请注意,每个用户的值必须是唯一的。如果存在重叠,用户就有可能使用另一个用户的命名空间,并且他们可能会破坏它。
[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
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容器中的实用程序。
如果需要,管理员必须验证用户的 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 阅读
如果它们以该顺序存在。每个文件都可以覆盖特定字段的前一个文件。$HOME/.config/containers/containers.conf优先级最高
存储配置文件
$HOME/.config/containers/storage.conf优先级高于/etc/containers/storage.conf
登记处registries.conf
优先级按以下顺序排列,依次升高
主目录中的文件应该用于根据个人需要配置无根 Podman。默认情况下不会创建这些文件。用户可以从中复制/usr/share/containers或/etc/containers修改文件。
如果您的容器以 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