1. 首页 > Podman教程 > 正文

Podman教程FG006-Podman容器管理

本文档风哥主要介绍Podman的容器管理,包括容器的概念、生命周期、操作以及容器的部署和监控等内容。风哥教程参考Podman官方文档Container Management部分,适合容器管理员和开发人员在学习和测试中使用,如果要应用于生产环境则需要自行确认。

Part01-基础概念与理论知识

1.1 容器概念

容器是一个轻量级、可移植、自包含的软件包,包含运行应用所需的一切:代码、运行时、库、环境变量和配置文件。Podman使用容器来运行应用,每个容器都是一个独立的运行环境。更多视频教程www.fgedu.net.cn

容器的特点:

  • 轻量级:比虚拟机更轻,启动更快
  • 可移植:可以在不同的环境中运行
  • 隔离性:容器之间相互隔离
  • 一致性:在不同环境中运行结果一致
  • 可伸缩:可以快速创建和销毁

1.2 容器生命周期

容器的生命周期包括以下几个阶段:

  • 创建:使用podman create命令创建容器
  • 运行:使用podman start命令启动容器
  • 暂停:使用podman pause命令暂停容器
  • 恢复:使用podman unpause命令恢复容器
  • 停止:使用podman stop命令停止容器
  • 删除:使用podman rm命令删除容器

1.3 容器操作

Podman的容器操作主要包括以下几个方面:

  • 创建和运行容器:使用podman run命令
  • 查看容器:使用podman ps命令
  • 停止和启动容器:使用podman stop和podman start命令
  • 删除容器:使用podman rm命令
  • 进入容器:使用podman exec命令
  • 查看容器日志:使用podman logs命令
  • 查看容器详情:使用podman inspect命令
风哥提示:容器的生命周期管理是Podman使用的核心,掌握容器的各种操作命令可以有效地管理容器的运行状态。学习交流加群风哥微信: itpux-com

Part02-生产环境规划与建议

2.1 容器管理策略

生产环境中Podman的容器管理策略:

# 容器管理策略

## 容器命名
– 为容器设置有意义的名称
– 使用一致的命名规范
– 避免使用默认名称

## 容器标签
– 为容器添加标签,便于管理和识别
– 使用标签记录容器的用途、版本等信息

## 容器编排
– 使用podman-compose或Kubernetes进行容器编排
– 定义容器之间的依赖关系
– 实现容器的自动伸缩和故障转移

## 容器版本管理
– 使用固定版本的镜像
– 建立容器版本控制机制
– 定期更新容器

## 容器清理
– 定期清理停止的容器
– 清理无用的容器和镜像
– 释放存储空间

2.2 容器安全

生产环境中Podman的容器安全考虑:

# 容器安全

## 镜像安全
– 使用官方镜像或可信来源的镜像
– 定期扫描镜像中的安全漏洞
– 及时更新镜像

## 容器隔离
– 使用非root用户运行容器
– 限制容器的权限和能力
– 配置适当的SELinux设置
– 使用网络隔离

## 数据安全
– 保护容器数据
– 定期备份数据
– 加密敏感数据

## 运行时安全
– 监控容器的运行状态
– 检测异常行为
– 配置适当的防火墙规则

2.3 容器资源管理

生产环境中Podman的容器资源管理:

  • CPU限制:为容器设置CPU使用限制,避免CPU争用
  • 内存限制:为容器设置内存使用限制,避免内存不足
  • 磁盘限制:为容器设置磁盘使用限制,避免磁盘空间耗尽
  • 网络限制:为容器设置网络带宽限制,避免网络拥塞
生产环境建议:合理管理容器资源,避免资源争用,确保容器的稳定运行。学习交流加群风哥QQ113257174

Part03-生产环境项目实施方案

3.1 容器基础操作

3.1.1 运行容器

# 运行容器
$ podman run -d -p 8080:80/tcp –name fgedu-httpd docker.io/library/httpd

# 输出日志
7890123456ab

# 查看运行中的容器
$ podman ps

# 输出日志
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7890123456ab docker.io/library/httpd httpd-foreground 2 minutes ago Up 2 minutes ago 0.0.0.0:8080->80/tcp fgedu-httpd

3.1.2 停止和启动容器

# 停止容器
$ podman stop fgedu-httpd

# 输出日志
fgedu-httpd

# 启动容器
$ podman start fgedu-httpd

# 输出日志
fgedu-httpd

# 查看容器状态
$ podman ps

# 输出日志
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7890123456ab docker.io/library/httpd httpd-foreground 10 minutes ago Up 1 minute ago 0.0.0.0:8080->80/tcp fgedu-httpd

3.1.3 删除容器

# 删除容器
$ podman rm fgedu-httpd

# 输出日志
fgedu-httpd

# 查看所有容器
$ podman ps -a

# 输出日志
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

3.2 容器高级操作

3.2.1 进入容器

# 进入容器
$ podman exec -it fgedu-httpd /bin/bash

# 输出日志
root@7890123456ab:/usr/local/apache2#

# 在容器中执行命令
root@7890123456ab:/usr/local/apache2# ls -la

# 退出容器
root@7890123456ab:/usr/local/apache2# exit

3.2.2 查看容器日志

# 查看容器日志
$ podman logs fgedu-httpd

# 输出日志
127.0.0.1 – – [04/May/2020:08:33:48 +0000] “GET / HTTP/1.1” 200 45
127.0.0.1 – – [04/May/2020:08:33:50 +0000] “GET / HTTP/1.1” 200 45
127.0.0.1 – – [04/May/2020:08:33:51 +0000] “GET / HTTP/1.1” 200 45

3.2.3 查看容器详情

# 查看容器详情
$ podman inspect fgedu-httpd

# 输出日志(部分)
[
{
“Id”: “7890123456ab”,
“Created”: “2026-04-10T10:00:00Z”,
“Path”: “httpd-foreground”,
“Args”: [],
“State”: {
“OciVersion”: “1.0.2-dev”,
“Status”: “running”,
“Running”: true,
“Paused”: false,
“Restarting”: false,
“OOMKilled”: false,
“Dead”: false,
“Pid”: 12345,
“ExitCode”: 0,
“Error”: “”,
“StartedAt”: “2026-04-10T10:00:00Z”,
“FinishedAt”: “0001-01-01T00:00:00Z”
},

}
]

3.3 容器监控

3.3.1 查看容器资源使用情况

# 查看容器资源使用情况
$ podman stats fgedu-httpd

# 输出日志
ID NAME CPU % MEM USAGE / LIMIT MEM % NET IO BLOCK IO PIDS
7890123456ab fgedu-httpd 0.10% 6.25MB / 16.0GB 0.04% 1.2MB / 512.0KB 0B / 0B 6

3.3.2 查看容器进程

# 查看容器进程
$ podman top fgedu-httpd

# 输出日志
USER PID PPID %CPU ELAPSED TTY TIME COMMAND
root 1 0 0.000 22m13.33281018s pts/0 0s httpd -DFOREGROUND
daemon 3 1 0.000 22m13.333132179s pts/0 0s httpd -DFOREGROUND
daemon 4 1 0.000 22m13.333276305s pts/0 0s httpd -DFOREGROUND
daemon 5 1 0.000 22m13.333818476s pts/0 0s httpd -DFOREGROUND

风哥提示:容器监控是生产环境中非常重要的环节,通过监控容器的资源使用情况和运行状态,可以及时发现和解决问题。更多学习教程公众号风哥教程itpux_com

Part04-生产案例与实战讲解

4.1 Web容器部署

4.1.1 部署Nginx容器

# 部署Nginx容器

# 拉取Nginx镜像
$ podman pull docker.io/library/nginx

# 运行Nginx容器
$ podman run -d -p 80:80/tcp –name fgedu-nginx \
-v /Podman/fgdata/nginx/conf:/etc/nginx/conf.d:z \
-v /Podman/fgdata/nginx/html:/usr/share/nginx/html:z \
docker.io/library/nginx

# 查看容器状态
$ podman ps

# 输出日志
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6543217890ab docker.io/library/nginx nginx -g daemon 2 minutes ago Up 2 minutes ago 0.0.0.0:80->80/tcp fgedu-nginx

# 测试Nginx服务
$ curl http://localhost

# 输出日志

Welcome to nginx!

4.2 数据库容器部署

4.2.1 部署PostgreSQL容器

# 部署PostgreSQL容器

# 拉取PostgreSQL镜像
$ podman pull docker.io/library/postgres:14

# 运行PostgreSQL容器
$ podman run -d -p 5432:5432 –name fgedu-postgres \
-v /Podman/fgdata/postgres/data:/var/lib/postgresql/data:z \
-e POSTGRES_PASSWORD=fgedu123 \
-e POSTGRES_USER=fgedu \
-e POSTGRES_DB=fgedudb \
docker.io/library/postgres:14

# 查看容器状态
$ podman ps

# 输出日志
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3216549870ab docker.io/library/postgres:14 postgres 5 minutes ago Up 5 minutes ago 0.0.0.0:5432->5432/tcp fgedu-postgres

# 连接PostgreSQL
$ podman exec -it fgedu-postgres psql -U fgedu -d fgedudb

# 输出日志
psql (14.0 (Debian 14.0-1.pgdg110+1))
Type “help” for help.

fgedudb=#

4.3 应用容器部署

4.3.1 部署Node.js应用容器

# 部署Node.js应用容器

# 创建项目目录
$ mkdir -p nodeapp
$ cd nodeapp

# 创建Dockerfile
$ cat > Dockerfile << EOF FROM docker.io/library/node:16-alpine WORKDIR /app COPY package.json . RUN npm install COPY . . EXPOSE 3000 CMD ["node", "app.js"] EOF # 创建package.json $ cat > package.json << EOF { "name": "nodeapp", "version": "1.0.0", "description": "Node.js app", "main": "app.js", "scripts": { "start": "node app.js" }, "dependencies": { "express": "^4.17.1" } } EOF # 创建app.js $ cat > app.js << EOF const express = require('express'); const app = express(); app.get('/', (req, res) => {
res.send(‘

Hello from Node.js!

‘);
});

app.listen(3000, () => {
console.log(‘App listening on port 3000!’);
});
EOF

# 构建镜像
$ podman build -t fgedu/nodeapp:latest .

# 运行容器
$ podman run -d -p 3000:3000 –name fgedu-nodeapp fgedu/nodeapp:latest

# 测试应用
$ curl http://localhost:3000

# 输出日志

Hello from Node.js!

生产环境建议:在部署容器时,应考虑数据持久化、网络配置、资源限制等因素,确保容器的稳定运行。from Podman视频:www.itpux.com

Part05-风哥经验总结与分享

5.1 容器管理最佳实践

Podman容器管理的最佳实践:

  • 使用有意义的容器名称:为容器设置有意义的名称,便于管理和识别
  • 设置资源限制:为容器设置CPU、内存等资源限制,避免资源争用
  • 使用卷进行数据持久化:使用卷或绑定挂载进行数据持久化,避免数据丢失
  • 配置健康检查:为容器配置健康检查,监控容器状态
  • 使用非root用户运行容器:提高容器的安全性
  • 定期清理容器:定期清理停止的容器和无用的镜像,释放存储空间
  • 监控容器:监控容器的运行状态和资源使用情况,及时发现和解决问题
  • 备份容器数据:定期备份容器数据,防止数据丢失

5.2 常见问题与解决方案

Podman容器管理中的常见问题与解决方案:

# 常见问题与解决方案

## 问题1:容器无法启动
# 解决方案:
– 检查镜像是否存在
– 检查端口是否被占用
– 检查资源是否足够
– 查看容器日志:podman logs

## 问题2:容器网络连接问题
# 解决方案:
– 检查网络配置
– 检查防火墙规则
– 检查DNS配置
– 使用podman network inspect查看网络详情

## 问题3:容器数据丢失
# 解决方案:
– 使用卷或绑定挂载进行数据持久化
– 定期备份容器数据
– 实现数据备份策略

## 问题4:容器资源使用过高
# 解决方案:
– 为容器设置资源限制
– 优化容器应用
– 增加容器实例或升级硬件

## 问题5:容器权限问题
# 解决方案:
– 使用正确的用户权限
– 配置适当的文件权限
– 使用rootless容器

5.3 故障排查

Podman容器管理的故障排查:

# 故障排查

## 容器启动失败
– 查看容器日志:podman logs
– 检查容器配置:podman inspect
– 检查端口占用:netstat -tulpn | grep – 检查资源使用:free -h, df -h

## 容器网络问题
– 检查网络配置:podman network inspect
– 检查防火墙规则:sudo firewall-cmd –list-all
– 测试网络连接:podman exec ping google.com
– 检查DNS配置:podman exec cat /etc/resolv.conf

## 容器存储问题
– 检查磁盘空间:df -h
– 检查存储配置:cat /etc/containers/storage.conf
– 检查卷权限:ls -la /Podman/fgdata
– 检查容器挂载:podman inspect | grep Mounts

## 容器性能问题
– 查看资源使用:podman stats
– 查看容器进程:podman top
– 优化容器配置:调整资源限制
– 检查应用性能:使用应用监控工具

## 容器安全问题
– 扫描镜像漏洞:使用Trivy等工具
– 检查容器权限:podman inspect | grep Capabilities
– 检查SELinux设置:sudo sestatus
– 查看容器日志:podman logs

风哥提示:容器管理是Podman使用中的核心环节,掌握容器的各种操作命令和管理策略,可以有效地管理容器的运行状态,确保应用的稳定运行。建议建立完善的容器管理流程,包括容器的创建、运行、监控、备份和清理等环节。

本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html

联系我们

在线咨询:点击这里给我发消息

微信号:itpux-com

工作日:9:30-18:30,节假日休息