Podman的部署和应用
Podman是什么?
Podman 是一个无守护程序、开源的 Linux 原生工具,旨在使用开放容器计划 (OCI) 容器和容器映像轻松查找、运行、构建、共享和部署应用程序。Podman 提供了一个命令行界面 (CLI),任何使用过 Docker 容器引擎的人都熟悉。大多数用户可以简单地将Docker别名为Podman(别名docker=podman),而不会出现任何问题。与其他常见的容器引擎(Docker,CRI-O,containerd)类似,Podman依靠符合OCI的容器运行时(runc,crun,runv等)与操作系统接口并创建正在运行的容器。这使得Podman创建的正在运行的容器与任何其他常见容器引擎创建的容器几乎没有区别。
Podman的部署
[root@master ~]# yum -y install podman-docker
//podman的加速器
[root@master ~]# vim /etc/containers/registries.conf
[[registry]]
prefix = "docker.io"
location="qr9cmeol.mirror.aliyuncs.com"
Podma的应用
命令 | 描述 |
---|---|
attach | 将本地标准输入、输出和错误流附加到运行的容器 |
build | 从Dockerfile构建映像 |
commit | 根据容器的更改创建一个新映像 |
cp | 在容器和本地文件系统之间复制文件/文件夹 |
create | 创建一个新容器 |
diff | 检查容器文件系统中对文件或目录的更改 |
events | 从服务器获取实时事件 |
exec | 在运行容器中运行命令 |
export | 将容器的文件系统导出为tar存档文件 |
history | 显示映像的历史 |
images | 映像列表 |
import | 从tarball中导入内容以创建文件系统映像 |
info | 显示整个系统的信息 |
inspect | 返回Docker对象的低级信息 |
kill | 杀死一个或多个运行中的容器 |
load | 从tar存档或STDIN加载一个映像 |
login | 登录Docker注册表 |
logout | 从Docker注册表注销 |
logs | 获取容器的日志 |
pause | 暂停一个或多个容器中的所有进程 |
port | 列出端口映射或容器的特定映射 |
ps | 列表容器 |
pull | 从注册表中拉出映像或存储库 |
push | 将映像或存储库推送到注册表 |
rename | 重命名一个容器 |
restart | 重新启动一个或多个容器 |
rm | 移除一个或多个容器 |
rmi | 删除一个或多个映像 |
run | 在新容器中运行命令 |
save | 将一个或多个映像保存到tar归档文件中(默认流到STDOUT) |
search | 在Docker Hub中搜索映像 |
start | 启动一个或多个停止的容器 |
stats | 显示容器资源使用统计信息的实时流 |
stop | 停止一个或多个运行中的容器 |
tag | 创建一个引用SOURCE_IMAGE的标记TARGET_IMAGE |
top | 显示容器的运行进程 |
unpause | 取消暂停一个或多个容器中的所有进程 |
update | 更新一个或多个容器的配置 |
version | 显示Docker版本信息 |
wait | 阻塞,直到一个或多个容器停止,然后打印它们的退出代码 |
使用 Podman 非常的简单,Podman 的指令跟 Docker 大多数都是相同的。下面我们来看几个常用的例子:
//搜索镜像
[root@master ~]# podman search busybox
//拉取一个镜像
[root@master ~]# podman pull busybox
[root@master ~]# podman images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/library/busybox latest 7a80323521cc 2 weeks ago 1.47 MB
//运行一个容器
[root@master ~]# podman run -d --name httpd docker.io/library/httpd
//列出运行的容器
[root@master ~]# podman ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
99366946946c docker.io/library/httpd:latest httpd-foreground 3 minutes ago Up 3 minutes ago httpd
//查看一个运行中容器的日志
[root@master ~]# podman logs httpd
//查看一个运行容器中的进程资源使用情况,可以使用top观察容器中的 nginx pid
[root@master ~]# podman top httpd
USER PID PPID %CPU ELAPSED TTY TIME COMMAND
root 1 0 0.000 4m40.540775446s ? 0s httpd -DFOREGROUND
www-data 7 1 0.000 4m40.540998289s ? 0s httpd -DFOREGROUND
www-data 8 1 0.000 4m40.541251262s ? 0s httpd -DFOREGROUND
www-data 9 1 0.000 4m40.54134508s ? 0s httpd -DFOREGROUND
//停止一个运行中的容器
[root@master ~]# podman ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
99366946946c docker.io/library/httpd:latest httpd-foreground 5 minutes ago Up 5 minutes ago httpd
[root@master ~]# podman stop httpd
httpd
[root@master ~]# podman ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
//删除一个容器
[root@master ~]# podman ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
99366946946c docker.io/library/httpd:latest httpd-foreground 5 minutes ago Exited (0) 42 seconds ago httpd
[root@master ~]# podman rm httpd
99366946946ca23dda7b90dc2d25bc3d164770875e32c76834955a82c0f08490
[root@master ~]# podman ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
//容器与主机之间的数据拷贝
[root@master ~]# mkdir yxt
[root@master ~]# podman cp yxt/ 87dd9dae3e54:/
[root@master ~]# podman attach yxt
/ # ls
bin dev etc home proc root run sys tmp usr var yxt
[root@master ~]# rm -rf yxt/
[root@master ~]# podman cp 87dd9dae3e54:/yxt /
[root@master ~]# ls /
bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var yxt
//进入一个正在运行的容器
[root@master ~]# podman ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
87dd9dae3e54 docker.io/library/busybox:latest sh 2 hours ago Up 2 hours ago yxt
[root@master ~]# podman attach yxt
/ #
//检查容器文件系统中对文件或目录的更改
[root@master ~]# podman diff f2a976f932ec
C /usr
C /usr/local
C /usr/local/bin
A /usr/local/bin/httpd-foreground
//登入docker仓库
[root@master ~]# podman login docker.io
Username: yexiaotian
Password:
Login Succeeded!
//修改标签
[root@master ~]# podman images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/library/httpd latest f2a976f932ec 13 days ago 149 MB
docker.io/library/busybox latest 7a80323521cc 2 weeks ago 1.47 MB
[root@master ~]# podman tag docker.io/library/busybox:latest quay.io/yxt
/busybox:v0.1
[root@master ~]# podman images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/library/httpd latest f2a976f932ec 13 days ago 149 MB
docker.io/library/busybox latest 7a80323521cc 2 weeks ago 1.47 MB
quay.io/yxt/busybox v0.1 7a80323521cc 2 weeks ago 1.47 MB
//查看镜像的元数据
[root@master ~]# podman inspect f2a976f932ec
[
{
"Id": "f2a976f932ec6fe48978c1cdde2c8217a497b1f080c80e49049e02757302cf74",
"Digest": "sha256:343452ec820a5d59eb3ab9aaa6201d193f91c3354f8c4f29705796d9353d4cc6",
"RepoTags": [
"docker.io/library/httpd:latest"
],
...
显示指定镜像的历史记录
[root@master ~]# podman history f2a976f932ec
ID CREATED CREATED BY SIZE COMMENT
f2a976f932ec 13 days ago /bin/sh -c #(nop) CMD ["httpd-foreground"] 0 B
<missing> 13 days ago /bin/sh -c #(nop) EXPOSE 80 0 B
<missing> 13 days ago /bin/sh -c #(nop) COPY file:c432ff61c4993e... 3.58 kB
<missing> 13 days ago /bin/sh -c #(nop) STOPSIGNAL SIGWINCH 0 B
...
//显示整个系统的信息
[root@master ~]# podman info
host:
arch: amd64
buildahVersion: 1.22.3
cgroupControllers:
- cpuset
- cpu
- cpuacct
- blkio
- memory
- devices
- freezer
- net_cls
- perf_event
- net_prio
- hugetlb
- pids
- rdma
cgroupManager: systemd
...
Podman于Docker的区别
- 单点故障问题,Docker Daemon一旦死亡,所有容器都将死亡
- Docker Daemon拥有运行中的容器的所有子进程
- 所有Docker操作都必须由具有跟root相同权限的用户执行
- 构建容器时可能会导致安全漏洞