再见 Docker,是时候拥抱下一代容器工具了 (2)

以上这些特性基本上都和 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

再见 Docker,是时候拥抱下一代容器工具了

虽然 Podman 也可以支持用户构建 Docker 镜像,但是构建速度比较慢。并且默认情况下使用 VFS 存储驱动程序会消耗大量磁盘空间。

Buildah 是一个专注于构建 OCI 容器镜像的工具,Buildah 构建速度非常快并使用覆盖存储驱动程序,可以节约大量的空间。

Buildah 基于 fork-exec 模型,不以守护进程运行。Buildah 支持 Dockerfile 中的所有命令。你可以直接使用 Dockerfiles 来构建镜像,并且不需要任何 root 权限。 Buildah 也支持用自己的语法文件构建镜像,可以允许将其他脚本语言集成到构建过程中。

下面是一个使用 Buidah 自有语法构建的例子。

再见 Docker,是时候拥抱下一代容器工具了

Buildah 和 Podman 之间的一个主要区别是:Podman 用于运行和管理容器, 允许我们使用熟悉的容器 CLI 命令在生产环境中管理和维护这些镜像和容器,而 Buildah 主用于构建容器。

项目地址:https://github.com/containers/buildah

Skopeo

Skopeo 是一个镜像管理工具,允许我们通过 Push、Pull和复制镜像来处理 Docker 和符合 OCI 规范的镜像。

项目地址:https://github.com/containers/skopeo

延伸阅读 什么是 OCI?

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zyyjdf.html