28.linux使用 Podman 运行容器
Linux 使用 Podman 运行容器
本章将介绍容器的基本概念,以及如何在 RHEL 系统上使用 podman 工具来运行和管理容器。
1. 容器技术简介
什么是容器?
“容器”这个术语和概念源于海运集装箱。
- 这些集装箱在城市与城市、国家与国家之间运输。
- 无论你走到世界哪个角落,你都会发现这些集装箱的尺寸完全相同…… 你知道为什么吗???
- 因为世界各地的码头、卡车、轮船和仓库都是为了方便运输和存储这些标准化的集装箱而建造的。
当我们谈论 IT 领域的容器时,我们也在实现类似的目标。
请注意:
- 容器技术主要由开发者或程序员使用,他们编写代码来构建应用程序。
- 作为系统管理员,你的工作是安装、配置和管理它们。
一个操作系统可以同时运行单个或多个容器。
容器软件:Docker 与 Podman
| 软件 | Podman | Docker |
|---|---|---|
| 开发者 | Red Hat | Solomon Hykes |
| 发布日期 | 2018年8月 | 2013年3月20日 |
| 特点 | 是 Docker 的一个替代品;RHEL 8 不支持 Docker;无守护进程,开源,Linux 原生。 | 最初的容器管理软件,通过后台守护进程工作。 |
2. 熟悉 Red Hat 容器技术
Red Hat 提供了一套无需容器引擎即可运行的命令行工具,包括:
podman: 用于直接管理 Pod、容器和容器镜像(run, stop, start, ps, attach 等)。buildah: 用于构建、推送和签名容器镜像。skopeo: 用于复制、检查、删除和签名镜像。runc: 为podman和buildah提供容器运行和构建功能。crun: 一个可选的运行时,可提供更大的灵活性、控制力和安全性,用于无根 (rootless) 容器。
熟悉 podman 容器技术
当您听到“容器”时,您还应该了解以下术语:
images(镜像): 容器可以通过镜像创建,容器也可以被转换回镜像。pods(Pod): 一组部署在同一主机上的容器。在podman的 Logo 中,有3个海豹组合在一起,象征着一个 Pod。
3. 构建、运行和管理容器
软件包安装与环境准备
- 安装 podman
1
2
3yum/dnf install podman -y
# 对于 Docker 用户
# yum install docker -y - 创建别名以兼容 docker 命令
1
alias docker=podman
- 获取帮助
1
2
3podman --help
# 或者
man podman - 检查版本
1
podman -v
- 检查
podman环境和仓库信息1
2# 如果您尝试加载一个容器镜像,它会先查找本地机器,然后按顺序列出的每个注册中心进行查找。
podman info
镜像管理
- 在仓库中搜索特定镜像
1
podman search httpd
- 下载可用镜像
1
podman pull docker.io/library/httpd
- 列出本地已下载的镜像
1
podman images
容器生命周期管理
运行一个下载好的 httpd 容器
1
podman run -dt -p 8080:80/tcp docker.io/library/httpd
d= detach (分离模式,即后台运行)t= get the tty shell (获取 tty 终端)p= port (端口映射)
列出正在运行的容器
1
podman ps
运行此命令后,您可以通过 Web 浏览器访问
http://<主机IP>:8080来检查 httpd 服务是否正常。查看容器日志
1
2# -l 表示查看最新创建的那个容器的日志
podman logs -l停止一个正在运行的容器
1
2# con-name/con-id 可以从 podman ps 命令的输出中获得
podman stop <con-name or con-id>通过改变端口号来运行多个 httpd 容器
1
2
3podman run -dt -p 8081:80/tcp docker.io/library/httpd
podman run -dt -p 8082:80/tcp docker.io/library/httpd
podman ps停止和启动一个先前运行的容器
1
podman stop|start <con-name or con-id>
从已下载的镜像创建一个新容器(但不启动)
1
podman create --name httpd-con docker.io/library/httpd
启动一个已创建的容器
1
podman start httpd-con
4. 通过 systemd 管理容器
为了让容器能作为系统服务被管理(例如开机自启),可以为其生成 systemd 单元文件。
生成单元文件
首先,您必须有一个已创建的容器(例如我们之前创建的
httpd-con)。1
podman generate systemd --new --files --name httpd-con
复制单元文件到
systemd目录1
cp container-httpd-con.service /etc/systemd/system/
启用服务
1
systemctl enable container-httpd-con.service
启动服务
1
systemctl start container-httpd-con.service