本文档风哥主要介绍Podman的基础操作,包括镜像管理、容器管理和Pod管理等内容。风哥教程参考Podman官方文档Getting Started部分,适合容器管理员和开发人员在学习和测试中使用,如果要应用于生产环境则需要自行确认。
Part01-基础概念与理论知识
1.1 基础操作概述
Podman的基础操作主要包括以下几个方面:
- 镜像操作:搜索、拉取、推送、构建镜像
- 容器操作:创建、运行、停止、删除容器
- Pod操作:创建、运行、停止、删除Pod
- 网络操作:创建、删除、管理网络
- 存储操作:创建、删除、管理存储卷
Podman的命令与Docker兼容,熟悉Docker的用户可以快速上手Podman。更多视频教程www.fgedu.net.cn
1.2 命令结构
Podman的命令结构与Docker类似,基本格式为:
podman [command] [options] [arguments]
# 示例
podman run -d -p 8080:80 httpd
1.3 操作原理
Podman的操作原理:
- 无守护进程:Podman直接与容器运行时交互,不需要通过守护进程
- Rootless容器:可以以非root用户身份运行容器
- OCI兼容:符合OCI(Open Container Initiative)标准
- 镜像管理:使用容器镜像作为容器的基础
- 容器生命周期:管理容器的创建、运行、停止和删除
Part02-生产环境规划与建议
2.1 操作最佳实践
Podman基础操作的最佳实践:
## 镜像管理
– 使用官方镜像
– 定期更新镜像
– 使用固定标签
– 构建自定义镜像时使用多阶段构建
## 容器管理
– 为容器设置名称
– 为容器设置资源限制
– 使用卷或绑定挂载进行数据持久化
– 配置适当的网络设置
– 定期清理停止的容器
## Pod管理
– 合理组织容器到Pod中
– 为Pod设置资源限制
– 考虑Pod的生命周期管理
## 网络管理
– 根据需求选择合适的网络模式
– 为容器配置固定的网络设置
– 考虑网络隔离和安全
## 存储管理
– 使用卷进行数据持久化
– 定期备份卷数据
– 考虑存储性能和可靠性
2.2 操作建议
生产环境中Podman的操作建议:
- 使用脚本:编写脚本自动化常见操作
- 监控:监控容器的运行状态和资源使用情况
- 日志管理:配置日志收集和管理
- 安全:遵循安全最佳实践,如使用非root用户运行容器
- 备份:定期备份容器数据和配置
2.3 操作安全
Podman操作的安全考虑:
## 容器安全
– 使用官方镜像
– 定期更新镜像
– 限制容器权限
– 使用非root用户运行容器
– 配置适当的SELinux设置
## 网络安全
– 配置网络隔离
– 限制容器的网络访问
– 使用安全的网络协议
## 存储安全
– 保护容器数据
– 定期备份数据
– 加密敏感数据
## 操作安全
– 使用强密码
– 限制用户权限
– 定期审计操作日志
Part03-生产环境项目实施方案
3.1 镜像操作
3.1.1 搜索镜像
$ podman search httpd –filter=is-official
# 输出日志
INDEX NAME DESCRIPTION STARS OFFICIAL AUTOMATED
docker.io docker.io/library/httpd The Apache HTTP Server Project 4530 [OK]
3.1.2 拉取镜像
$ podman pull docker.io/library/httpd
# 输出日志
Trying to pull docker.io/library/httpd:latest…
Getting image source signatures
Copying blob sha256:1b930d010525941c1d56ec53b97bd057a67ae1865eebdf215ab32c7535e74459
Copying blob sha256:3a665e454db5bb98a02676a3c3663f322840a7269042ea8cc68690921f21820e
Copying blob sha256:62c937d0efb80962f6d11031fd482308b082083c50281892b982c13d7c631221
Copying config sha256:1234567890ab
Writing manifest to image destination
Storing signatures
1234567890ab
3.1.3 查看镜像
$ podman images
# 输出日志
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/library/httpd latest 1234567890ab 2 weeks ago 148 MB
3.2 容器操作
3.2.1 运行容器
$ podman run -d -p 8080:80/tcp –name fgedu-httpd docker.io/library/httpd
# 输出日志
7890123456ab
3.2.2 查看容器
$ 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
# 查看所有容器
$ podman ps -a
# 输出日志
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.2.3 停止和删除容器
$ podman stop fgedu-httpd
# 输出日志
fgedu-httpd
# 删除容器
$ podman rm fgedu-httpd
# 输出日志
fgedu-httpd
3.3 Pod操作
3.3.1 创建Pod
$ podman pod create –name fgedu-pod -p 8080:80
# 输出日志
f45678901234
3.3.2 在Pod中运行容器
$ podman run -d –pod fgedu-pod –name fgedu-httpd docker.io/library/httpd
# 输出日志
9876543210ab
# 查看Pod
$ podman pod ps
# 输出日志
POD ID NAME STATUS CREATED INFRA ID # OF CONTAINERS
f45678901234 fgedu-pod Running 5 minutes ago 1234567890ab 2
Part04-生产案例与实战讲解
4.1 Web服务器部署
4.1.1 部署HTTPD容器
# 拉取HTTPD镜像
$ podman pull docker.io/library/httpd
# 运行HTTPD容器
$ podman run -d -p 8080:80/tcp –name fgedu-httpd \
-v /Podman/fgdata/httpd/html:/usr/local/apache2/htdocs:z \
docker.io/library/httpd
# 查看容器状态
$ 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
# 测试HTTPD服务
$ curl http://localhost:8080
# 输出日志
It works!
…
4.2 数据库部署
4.2.1 部署MySQL容器
# 拉取MySQL镜像
$ podman pull docker.io/library/mysql:8.0
# 运行MySQL容器
$ podman run -d -p 3306:3306 –name fgedu-mysql \
-v /Podman/fgdata/mysql/data:/var/lib/mysql:z \
-e MYSQL_ROOT_PASSWORD=fgedu123 \
-e MYSQL_DATABASE=fgedudb \
-e MYSQL_USER=fgedu \
-e MYSQL_PASSWORD=fgedu123 \
docker.io/library/mysql:8.0
# 查看容器状态
$ podman ps
# 输出日志
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9876543210ab docker.io/library/mysql:8.0 mysqld 5 minutes ago Up 5 minutes ago 0.0.0.0:3306->3306/tcp fgedu-mysql
# 连接MySQL
$ podman exec -it fgedu-mysql mysql -u fgedu -pfgedu123
# 输出日志
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.0.33 MySQL Community Server – GPL
Copyright (c) 2000, 2023, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the current input statement.
mysql>
4.3 应用部署
4.3.1 部署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!
…
Part05-风哥经验总结与分享
5.1 操作技巧
Podman基础操作的技巧:
- 使用别名:为常用命令设置别名,提高操作效率
- 批量操作:使用podman ps -q配合xargs进行批量操作
- 容器命名:为容器设置有意义的名称,便于管理
- 资源限制:为容器设置资源限制,避免资源争用
- 健康检查:为容器配置健康检查,监控容器状态
- 日志管理:配置适当的日志驱动,便于日志收集和分析
5.2 常见问题与解决方案
Podman基础操作中的常见问题与解决方案:
## 问题1:容器无法启动
# 解决方案:
– 检查镜像是否存在
– 检查端口是否被占用
– 检查资源是否足够
– 查看容器日志:podman logs
## 问题2:镜像拉取失败
# 解决方案:
– 检查网络连接
– 检查镜像仓库配置
– 尝试使用不同的镜像仓库
– 清理缓存:podman system prune -a
## 问题3:容器网络连接问题
# 解决方案:
– 检查网络配置
– 检查防火墙规则
– 检查DNS配置
– 使用podman network inspect查看网络详情
## 问题4:容器数据丢失
# 解决方案:
– 使用卷或绑定挂载
– 定期备份数据
– 实现数据持久化策略
## 问题5:权限问题
# 解决方案:
– 使用正确的用户权限
– 配置适当的文件权限
– 使用rootless容器
5.3 故障排查
Podman基础操作的故障排查:
## 容器启动失败 ## 镜像拉取失败 ## 网络问题 ## 存储问题 ## 性能问题
– 查看容器日志:podman logs
– 检查容器配置:podman inspect
– 检查端口占用:netstat -tulpn | grep
– 检查网络连接:ping docker.io
– 检查镜像仓库配置:cat /etc/containers/registries.conf
– 查看拉取日志:podman pull
– 检查网络配置:podman network inspect
– 检查防火墙规则:sudo firewall-cmd –list-all
– 测试网络连接:podman exec
– 检查磁盘空间:df -h
– 检查存储配置:cat /etc/containers/storage.conf
– 检查权限:ls -la /Podman/fgdata
– 检查资源使用:podman stats
– 检查容器状态:podman inspect
– 优化容器配置:调整资源限制
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
