以上这些特性基本上都和 Docker 一样,Podman 除了兼容这些特性外,还支持了一些新的特性。
给容器设置一个检查点 $ sudo podman container checkpoint <container_id>需要 CRIU 3.11 以上版本支持,CRIU 项目地址:https://criu.org/
根据检查点位置恢复容器 $ sudo podman container restore <container_id> 迁移容器Podman 支持将容器从一台机器迁移到另一台机器。
首先,在源机器上对容器设置检查点,并将容器打包到指定位置。
$ sudo podman container checkpoint <container_id> -e /tmp/checkpoint.tar.gz $ scp /tmp/checkpoint.tar.gz <destination_system>:/tmp其次,在目标机器上使用源机器上传输过来的打包文件对容器进行恢复。
$ sudo podman container restore -i /tmp/checkpoint.tar.gz 配置别名如果习惯了使用 Docker 命令,可以直接给 Podman 配置一个别名来实现无缝转移。你只需要在 .bashrc 下加入以下行内容即可:
$ echo "alias docker=podman" >> .bashrc $ source .bashrc Podman 如何实现开机重启容器由于 Podman 不再使用守护进程管理服务,所以不能通过守护进程去实现自动重启容器的功能。那如果要实现开机自动重启容器,又该如何实现呢?
其实方法很简单,现在大多数系统都已经采用 Systemd 作为守护进程管理工具。这里我们就可以使用 Systemd 来实现 Podman 开机重启容器,这里我们以启动一个 Nginx 容器为例子。
首先,我们先运行一个 Nginx 容器。
$ sudo podman run -t -d -p 80:80 --name nginx nginx然后,在建立一个 Systemd 服务配置文件。
$ vim /etc/systemd/system/nginx_container.service [Unit] Description=Podman Nginx Service After=network.target After=network-online.target [Service] Type=simple ExecStart=http://www.likecs.com/usr/bin/podman start -a nginx ExecStop=http://www.likecs.com/usr/bin/podman stop -t 10 nginx Restart=always [Install] WantedBy=multi-user.target接下来,启用这个 Systemd 服务。
$ sudo systemctl daemon-reload $ sudo systemctl enable nginx_container.service $ sudo systemctl start nginx_container.service服务启用成功后,我们可以通过 systemctl status 命令查看到这个服务的运行状况。
$ sudo systemctl status nginx_container.service ● nginx_container.service - Podman Nginx Service Loaded: loaded (/etc/systemd/system/nginx_container.service; enabled; vendor preset: disabled) Active: active (running) since Sat 2019-08-20 20:59:26 UTC; 1min 41s ago Main PID: 845 (podman) Tasks: 16 (limit: 4915) Memory: 37.6M CGroup: /system.slice/nginx_container.service └─845 /usr/bin/podman start -a nginx Aug 20 20:59:26 Ubuntu-dev.novalocal systemd[1]: Started Podman Nginx Service.之后每次系统重启后 Systemd 都会自动启动这个服务所对应的容器。
其它相关工具Podman 只是 OCI 容器生态系统计划中的一部分,主要专注于帮助用户维护和修改符合 OCI 规范容器镜像。其它的组件还有 Buildah、Skopeo 等。
Buildah虽然 Podman 也可以支持用户构建 Docker 镜像,但是构建速度比较慢。并且默认情况下使用 VFS 存储驱动程序会消耗大量磁盘空间。
Buildah 是一个专注于构建 OCI 容器镜像的工具,Buildah 构建速度非常快并使用覆盖存储驱动程序,可以节约大量的空间。
Buildah 基于 fork-exec 模型,不以守护进程运行。Buildah 支持 Dockerfile 中的所有命令。你可以直接使用 Dockerfiles 来构建镜像,并且不需要任何 root 权限。 Buildah 也支持用自己的语法文件构建镜像,可以允许将其他脚本语言集成到构建过程中。
下面是一个使用 Buidah 自有语法构建的例子。
Buildah 和 Podman 之间的一个主要区别是:Podman 用于运行和管理容器, 允许我们使用熟悉的容器 CLI 命令在生产环境中管理和维护这些镜像和容器,而 Buildah 主用于构建容器。
项目地址:https://github.com/containers/buildah
SkopeoSkopeo 是一个镜像管理工具,允许我们通过 Push、Pull和复制镜像来处理 Docker 和符合 OCI 规范的镜像。
项目地址:https://github.com/containers/skopeo
延伸阅读 什么是 OCI?