说明
- 一提到容器技术,肯定无法绕开 Docker,Docker 是一个著名的开源容器引擎,在容器技术已经在逐步普及的现在,Docker 几乎也成了容器的代名词。
- 作为目前主流的容器引擎,Docker 有着丰富的使用场景和解决方案,但也有一些问题。
- Docker 需要运行一个守护进程,所有容器都是守护进程的子进程
- 即存在单点风险,Docker进程炸了,容器也炸了
- Docker 需要
root
身份运行守护进程
- Docker 需要运行一个守护进程,所有容器都是守护进程的子进程
- 按红帽文档里面的说法
- 生产环境中,并不需要关注在命令行中运行容器,而是通过容器编排平台(Kubernetes/Openshift)来管理容器
- 作为容器引擎,最终用户不需要直接访问他们
- Podman相比Docker引擎,只保留核心功能,无需守护进程
RHEL/CentOS-8.0
不包含docker容器引擎(可以通过安装CentOS7的docker-ce),使用Podman、Buildah、Skopeo三剑客来替代docker容器引擎RHEL/CentOS-7
官方源也有Podman三剑客的RPM包
Podman简易教程
安装Podman
- For RHEL/CentOS-7.x
1 | yum install -y podman |
- For RHEL/CentOS-8.x
1 | dnf install -y podman |
拉取镜像
1 | podman pull docker.io/library/nginx:1.18.0-alpine |
运行镜像
1 | podman run -d --name=nginx -p 80:80 -p 443:443 docker.io/library/nginx:1.18.0-alpine |
查看容器
1 | podman ps |
输出示例
1 | CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES |
使用systemd托管Podman容器
这里介绍两种方式
- 自己写systemd unit文件
- Podman根据现有容器创建systemd unit文件
手动创建systemd unit文件
- 创建service文件
--conmon-pidfile
指向conmon进程的进程ID--cidfile
指向容器ID
1 | cat > /usr/lib/systemd/system/podman-nginx.service <<EOF |
- 配置服务
1 | systemctl daemon-reload |
- 查看服务状态
1 | systemctl status podman-nginx.service |
输出示例
1 | ● podman-nginx.service - Podman container-nginx.service |
使用Podman生成systemd unit文件
这里用上面运行的Nginx容器作为示例
- 创建service文件
1 | podman generate systemd --name nginx | tee /usr/lib/systemd/system/podman-nginx.service |
输出示例
1 | container-nginx.service |
- 配置systemd服务
1 | systemctl daemon-reload |
- 查看服务状态
1 | systemctl status podman-nginx.service |
输出示例
1 | ● podman-nginx.service - Podman container-nginx.service |