Podman介绍
Podman 是一个开源的容器运行时项目,可在大多数 Linux 平台上使用。Podman 提供与 Docker 非常相似的功能。正如前面提到的那样,它不需要在你的系统上运行任何守护进程,并且它也可以在没有 root 权限的情况下运行。
Podman 可以管理和运行任何符合 OCI(Open Container Initiative)规范的容器和容器镜像。Podman 提供了一个与 Docker 兼容的命令行前端来管理 Docker 镜像。
Podman与docker区别
- docker 需要在我们的系统上运行一个守护进程(docker daemon),而podman 不需要
- 启动容器的方式不同:
- docker cli 命令通过API跟 Docker Engine(引擎)交互告诉它我想创建一个container,然后docker Engine才会调用OCI container runtime(runc)来启动一个container。这代表container的process(进程)不会是Docker CLI的child process(子进程),而是Docker Engine的child process。
- Podman是直接给OCI containner runtime(runc)进行交互来创建container的,所以container process直接是podman的child process。
- 因为docke有docker daemon,所以docker启动的容器支持
--restart
策略,但是podman不支持,如果在k8s中就不存在这个问题,我们可以设置pod的重启策略,在系统中我们可以采用编写systemd服务来完成自启动 - docker需要使用root用户来创建容器,但是podman不需要
Podman安装
Centos、Fedora
1
sudo yum -y install podman
macOS
1
brew cask install podman
Podman CLI介绍
Podman CLI 里面87%的指令都和DOcker CLI 相同,官方给出了这么个例子alias docker=podman
,所以说经常使用DOcker CLI的人使用podman上手非常快
运行一个容器
1 | podman run -dt -p 80:80 --name nginx -v /data:/data -e NGINX_VERSION=1.16 nginx:1.16.0 |
列出当前所有的容器
1 | # podman ps -a |
查看一个镜像信息
1 | # podman inspect nginx | grep -i "ipaddress" |
查看容器运行的日志
1 | podman logs nginx |
查看运行中容器资源使用情况
1 | # podman top nginx |
迁移容器
Podman 支持将容器从一台机器迁移到另一台机器。
首先,在源机器上对容器设置检查点,并将容器打包到指定位置。
1 | $ sudo podman container checkpoint <container_id> -e /tmp/checkpoint.tar.gz |
其次,在目标机器上使用源机器上传输过来的打包文件对容器进行恢复。
1 | $ sudo podman container restore -i /tmp/checkpoint.tar.gz |
podman的程序如何设置自启动
由于 Podman 不再使用守护进程管理服务,所以不能通过守护进程去实现自动重启容器的功能。那如果要实现开机自动重启容器,又该如何实现呢?
其实方法很简单,现在大多数系统都已经采用 Systemd 作为守护进程管理工具。这里我们就可以使用 Systemd 来实现 Podman 开机重启容器,这里我们以刚才启动的nginx为例。
建立一个 Systemd 服务配置文件。
1 | $ vim /etc/systemd/system/nginx_podman.service |
接下来,启用这个 Systemd 服务
1 | $ sudo systemctl daemon-reload |
之后每次系统重启后 Systemd 都会自动启动这个服务所对应的容器,容器死亡之后也会启动这个容器。
配置别名
如果习惯了使用 Docker 命令,可以直接给 Podman 配置一个别名来实现无缝转移。你只需要在 .bashrc
下加入以下行内容即可:
1 | $ echo "alias docker=podman" >> .bashrc |