Podman的部署与常用命令
文章目录
- Podman的部署与常用命令
- podman简介掌握docker
- 安装podman
- Podman的命令使用
- 容器
- 镜像
- 常用命令演示
- 镜像
- 容器
podman简介掌握docker
Podman是一个开源项目,可在大多数Linux平台上使用并开源在GitHub上。Podman是一个无守护进程的容器引擎,用于在Linux系统上开发,管理和运行Open Container Initiative(OCI)容器和容器镜像。Podman提供了一个与Docker兼容的命令行前端,它可以简单地作为Docker cli,简单地说你可以直接添加别名:alias docker = podman来使用podman。
Podman控制下的容器可以由root用户运行,也可以由非特权用户运行。Podman管理整个容器的生态系统,其包括pod,容器,容器镜像,和使用libpod library的容器卷。Podman专注于帮助您维护和修改OCI容器镜像的所有命令和功能,例如拉取和标记。它允许您在生产环境中创建,运行和维护从这些映像创建的容器。
Podman 比较简单粗暴,它不使用 Daemon,而是直接通过 OCI runtime(默认也是 runc)来启动容器,所以容器的进程是 podman 的子进程。这比较像 Linux 的 fork/exec 模型,而 Docker 采用的是 C/S(客户端/服务器)模型。与 C/S 模型相比,fork/exec 模型有很多优势,比如:
系统管理员可以知道某个容器进程到底是谁启动的。
如果利用 cgroup 对 podman 做一些限制,那么所有创建的容器都会被限制。
SD_NOTIFY : 如果将 podman 命令放入 systemd 单元文件中,容器进程可以通过 podman
返回通知,表明服务已准备好接收任务。
socket 激活 : 可以将连接的 socket 从 systemd 传递到 podman,并传递到容器进程以便使用它们。
Podman 兼容 Docker吗?
大部分是兼容的,例如:
1.可以直接使用 Docker 镜像
2.命令非常相似
安装podman
//查看你的包里面有没有podman
[root@localhost ~]# dnf list all | grep podman
//安装podman
[root@localhost ~]# dnf -y install podman-docker.noarch
//查看版本号
[root@localhost ~]# podman -v
podman version 3.3.1
//永久配置Podman的别名为docker
[root@localhost ~]# echo "alias docker=podman" >> .bashrc
[root@localhost ~]# source
//使用docker命令查看本地仓库
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
//配置加速器
[root@localhost ~]# vim /etc/containers/registries.conf
unqualified-search-registries = [ "docker.io"] //这里选择只从一个一个源里面查找
[[registry]]
prefix = "docker.lo"
location = location = "docker.mirrors.ustc.edu.cn" //这里只用填地址
//查看加速器是否配置成功
[root@localhost ~]# podman info
registries:
docker.lo:
Blocked: false
Insecure: false
Location: docker.mirrors.ustc.edu.cn
MirrorByDigestOnly: false
Mirrors: null
Prefix: docker.lo
search:
- docker.io
store:
Podman的命令使用
attach 附加到正在运行的容器
commit 从更改的容器创建新镜像
build 使用 Dockerfile 说明构建镜像
create 创建一个容器,但不启动它
diff 检查容器文件系统的更改
exec 在正在运行的容器中运行进程
export 将容器的文件系统内容导出为 tar 归档
help, h 显示某个命令的命令或帮助列表
history 显示指定镜像的历史记录
images 列出本地存储中的镜像
import 导入 tarball 创建文件系统映像
info 显示系统信息
inspect 显示容器或镜像的配置
kill 向运行的一个或多个容器发送特定信号
load 从存档加载镜像
login 登录到容器 registry
logout 从容器 registry 中登出
logs 获取容器日志
mount 挂载可运行的容器根文件系统
pause 暂停一个或多个容器中的所有进程
ps 列出容器
port 列出容器的端口映射或特定映射
pull 从 registry 中拉取镜像
push 将镜像推送到指定的目的地
restart 重启一个或多个容器
rm 从主机中删除一个或多个容器。如果要运行,添加 -f。
rmi 从本地存储中移除一个或多个镜像
run 在新容器中运行命令
save 将镜像保存到存档中
search 在 registry 中搜索镜像
start 启动一个或多个容器
stats 为一个或多个容器显示 CPU、内存、网络 I/O、块 I/O 和 PID 百分比
stop 停止一个或多个容器
tag 为本地镜像添加额外名称
top 显示容器的运行进程
umount, unmount 卸载正常工作容器的根文件系统
unpause 取消暂停一个或多个容器中的流程
version 显示 podman 版本信息
wait 在一个或多个容器上阻止
容器
podman run 创建并启动容器
//参数说明
-a stdin: 指定标准输入输出内容类型,可选 STDIN/STDOUT/STDERR 三项;
-d: 后台运行容器,并返回容器ID;
-i: 以交互模式运行容器,通常与 -t 同时使用;
-t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
-P: 随机端口映射,容器内部端口随机映射到主机的端口
-p: 指定端口映射,格式为:主机(宿主)端口:容器端口
--name="nginx-lb": 为容器指定一个名称;
--dns 8.8.8.8: 指定容器使用的DNS服务器,默认和宿主一致;
--dns-search example.com: 指定容器DNS搜索域名,默认和宿主一致;
-h "mars": 指定容器的hostname;
-e username="ritchie": 设置环境变量
podman start 启动容器
podman ps 查看容器
podman stop 终止容器
podman restart 重启容器
podman attach 进入容器
podman exec 进入容器
podman export 导出容器
podman import 导入容器快照
podman rm 删除容器
podman logs 查看日志
镜像
podman search 检索镜像
podman 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 暴露端口
常用命令演示
镜像
podman search 检索镜像
[root@localhost ~]# podman login docker.io
Username: xiaopihai123
Password:
Login Succeeded!
[root@localhost ~]# podman search busybox
INDEX NAME DESCRIPTION STARS OFFICIAL AUTOMATED
docker.io docker.io/library/busybox Busybox base image. 2712 [OK]
docker.io docker.io/rancher/busybox 0
docker.io docker.io/ibmcom/busybox 0
docker.io docker.io/openebs/busybox-client 0
docker.io docker.io/antrea/busybox 0
docker.io docker.io/ibmcom/busybox-amd64 0
docker.io docker.io/ibmcom/busybox-ppc64le 0
docker.io docker.io/yauritux/busybox-curl Busybox with CURL 16
docker.io docker.io/radial/busyboxplus Full-chain, Internet enabled, busybox made f... 49 [OK]
docker.io docker.io/vukomir/busybox busybox and curl 1
docker.io docker.io/odise/busybox-curl 4 [OK]
docker.io docker.io/arm64v8/busybox Busybox base image. 4
docker.io docker.io/amd64/busybox Busybox base image. 0
docker.io docker.io/busybox42/zimbra-docker-centos A Zimbra Docker image, based in ZCS 8.8.9 an... 2 [OK]
docker.io docker.io/joeshaw/busybox-nonroot Busybox container with non-root user nobody 2
docker.io docker.io/ppc64le/busybox Busybox base image. 1
docker.io docker.io/p7ppc64/busybox Busybox base image for ppc64. 2
docker.io docker.io/s390x/busybox Busybox base image. 2
docker.io docker.io/prom/busybox Prometheus Busybox Docker base images 2 [OK]
docker.io docker.io/arm32v7/busybox Busybox base image. 10
docker.io docker.io/spotify/busybox Spotify fork of https://hub.docker.com/_/bus... 1
docker.io docker.io/busybox42/alpine-pod 0
docker.io docker.io/i386/busybox Busybox base image. 3
docker.io docker.io/busybox42/haraka-docker-centos CentOS Haraka build with spamassassin, redis... 1 [OK]
docker.io docker.io/arm32v5/busybox Busybox base image.
podman pull 获取镜像
[root@localhost ~]# podman pull busybox
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 50783e0dfb64 done
Copying config 7a80323521 done
Writing manifest to image destination
Storing signatures
7a80323521ccd4c2b4b423fa6e38e5cea156600f40cd855e464cc52a321a24dd
podman images 列出镜像
podman image Is 列出镜像
[root@localhost ~]# podman images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/library/busybox latest 7a80323521cc 2 weeks ago 1.47 MB
[root@localhost ~]# podman image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/library/busybox latest 7a80323521cc 2 weeks ago 1.47 MB
podman rmi 删除镜像
[root@localhost ~]# podman rmi busybox
Untagged: docker.io/library/busybox:latest
Deleted: 7a80323521ccd4c2b4b423fa6e38e5cea156600f40cd855e464cc52a321a24dd
[root@localhost ~]# podman image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
podman save 导出镜像
[root@localhost ~]# podman save busybox > busybox.tar
[root@localhost ~]# ls
anaconda-ks.cfg busybox.tar
podman load 导入镜像
[root@localhost ~]# podman image load < busybox.tar
Getting image source signatures
Copying blob 084326605ab6 [--------------------------------------] 0.0b / 0.0b
Copying config 7a80323521 done
Writing manifest to image destination
Storing signatures
Loaded image(s): docker.io/library/busybox:latest
显示镜像的历史记录
[root@localhost ~]# podman history busybox
ID CREATED CREATED BY SIZE COMMENT
7a80323521cc 2 weeks ago /bin/sh -c #(nop) CMD ["sh"] 0 B
<missing> 2 weeks ago /bin/sh -c #(nop) ADD file:03ed8a1a0e4c803... 1.46 MB
显示镜像的配置信息
[root@localhost ~]# podman image inspect busybox
[
{
"Id": "7a80323521ccd4c2b4b423fa6e38e5cea156600f40cd855e464cc52a321a24dd",
"Digest": "sha256:ef320ff10026a50cf5f0213d35537ce0041ac1d96e9b7800bafd8bc9eff6c693",
"RepoTags": [
"docker.io/library/busybox:latest"
],
"RepoDigests": [
"docker.io/library/busybox@sha256:98de1ad411c6d08e50f26f392f3bc6cd65f686469b7c22a85c7b5fb1b820c154",
"docker.io/library/busybox@sha256:da49ff878ad8a35695af6aeffbdb4954c3877b0382a053c61468f1086a9b1016",
"docker.io/library/busybox@sha256:ef320ff10026a50cf5f0213d35537ce0041ac1d96e9b7800bafd8bc9eff6c693"
],
......
容器
podman run 创建并启动容器
[root@localhost ~]# podman run -it busybox
/ #
podman start 启动容器
[root@localhost ~]# podman ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e45b8c2eb592 docker.io/library/busybox:latest sh About a minute ago Exited (0) 50 seconds ago tender_robinson
[root@localhost ~]# podman start e45b8c2eb592
e45b8c2eb592
podman ps 查看容器
[root@localhost ~]# podman ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e45b8c2eb592 docker.io/library/busybox:latest sh 2 minutes ago Up 48 seconds ago tender_robinson
podman stop 终止容器
[root@localhost ~]# podman stop e45b8c2eb592
e45b8c2eb592
[root@localhost ~]# podman ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
podman restart 重启容器
[root@localhost ~]# podman restart e45b8c2eb592
e45b8c2eb5929818186c1cdab99ef9a9a079384184692067c7867a7470c149d1
[root@localhost ~]# podman ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e45b8c2eb592 docker.io/library/busybox:latest sh 5 minutes ago Up 31 seconds ago tender_robinson
podman attach 进入容器
podman exec
[root@localhost ~]# podman attach tender_robinson
/ # ls
bin dev etc home proc root run sys tmp usr var
[root@localhost ~]# podman exec -it tender_robinson sh
/ #
podman rm 删除容器
[root@localhost ~]# podman rm -f tender_robinson
e45b8c2eb5929818186c1cdab99ef9a9a079384184692067c7867a7470c149d1
podman logs 查看日志
[root@localhost ~]# podman logs lxx
/ # exit
显示容器的映射端口
[root@localhost ~]# podman port