manjaro安装docker_再见Docker,Podman、Skopeo和Buildah下一代容器新架构强势出击!

manjaro安装docker_再见Docker,Podman、Skopeo和Buildah下一代容器新架构强势出击!_第1张图片

manjaro安装docker_再见Docker,Podman、Skopeo和Buildah下一代容器新架构强势出击!_第2张图片


缘起

在Docker实践中,很多人应该都遇到过开机重启时,由于Docker守护程序在占用多核CPU使用100%C使用的情况,此时所有容器都无法正常工作,所有服务都不能用。很悲催的是这事儿虫虫也遇到了,之前虫虫利用Docker重构WP博客的新架构(http://ijz.me)。由于VPS机器不是很稳定,时常会重启,重启时候就会遇到这个事情,VPS负载很高,容器都没有起来,网站就无法访问了。解决唯一方法只能杀掉所有容器并重启守护进程,才能恢复。经过了解该问题是由于Docker守护进程引起,而且Docker守护进程是以root特权权限启动的,是一个安全问题,那么有什么方法解决呢?本文介绍一下基于CRI 等标准(Docker新架构也符合CRI标准)的新一代容器工具Podman、Skopero和Buiddah套件。

OCI计划和Podman

为了防止容器被Docker一家垄断,巨头们(谷歌,Redhat、微软、IBM、Intel、思科)聚在一起喝了一个茶(有可能是铁观音,也可能是龙井)决定要成立一个组织(OCI),大家一起商量指定了一套规范(CRI、CNI),大家一致统一只兼容(喝铁观音)符合这套规范的工具。Docker虽然心有不甘但是毕竟胳膊拧不过大腿,只能该架构兼容规范(打了牙往肚里咽)。

在该规范的指导下就有了本文的三个主人公,这三个工具都是符合OCI计划下的工具(https://github.com/containers)。他们主要是由RedHat推动,三者各司其职,配合完成Docker所有的功能和新扩展功能,并且对docker的问题进行了改良:包括不需要守护程序或访问有root权限的组;容器架构基于fork/exec模型创建容器,更加安全可靠;所以是更先进、高效和安全的下一代容器容器工具。


Podman

manjaro安装docker_再见Docker,Podman、Skopeo和Buildah下一代容器新架构强势出击!_第3张图片


Podman是该工具套件的核心,用来替换Docker中了大多数子命令(RUN,PUSH,PULL等)。Podman无需守护进程,使用用户命名空间来模拟容器中的root,无需连接到具有root权限的套接字保证容器的体系安全。
Podman专注于维护和修改OCI镜像的所有命令和功能,例如拉动和标记。它还允许我们创建,运行和维护从这些镜像创建的容器。

Buildah

Buildah是套件中的Build工具,用来构建OCI镜像。虽然Podman也可以用户构建Docker镜像,但是构建速度超慢,并且默认情况下使用vfs存储驱动程序会消耗大量磁盘空间。 而buildah bud(使用Dockerfile构建)非常快,并使用覆盖存储驱动程序,可以节约大量的空间。

manjaro安装docker_再见Docker,Podman、Skopeo和Buildah下一代容器新架构强势出击!_第4张图片


Buildah专注于构建OCI镜像, Buildah的命令复制了Dockerfile中的所有命令。可以使用Dockerfiles构建镜像,并且不需要任何root权限。 Buildah的最终目标是提供更低级别的coreutils界面来构建镜像。Buildah也支持非Dockerfiles构建镜像,通过自有的语法规范来创建编译可以允许将其他脚本语言集成到构建过程中。下面是Buidah自有构建脚本部分:

manjaro安装docker_再见Docker,Podman、Skopeo和Buildah下一代容器新架构强势出击!_第5张图片

可见语法非常清晰熟悉,比Dockerfiles人性化多了。

和Podman一样Buildah遵循简单的fork-exec模型,无需以守护进程运行,但它基于golang中的综合API提供接口,可以方便的打包到其他工具中。

Skopeo

Skopeo是套件中镜像管理工具,允许我们通过推,拉和复制镜像来处理Docker和OC镜像。

manjaro安装docker_再见Docker,Podman、Skopeo和Buildah下一代容器新架构强势出击!_第6张图片


三个工具对比

Buildah构建容器,Podman运行容器,Skopeo传输容器镜像。这些通过在Github容器组织维护和开源。套件下的工具都无需运行守护进程,并且大多数情况下也不需要root访问权限。
Podman和Buildah之间的一个主要区别是他们的容器概念。 Podman可允许用户创建"传统容器"。Buildah容器作用是给容器添加一些特有的内容而构建容器,Buildah容器是过程容器,编译完成就消失,不能用来跑服务 。简而言之,buildah run命令模拟Dockerfile中的RUN命令,而podman run命令则模拟功能中的docker run命令。
总之,Buildah是创建OCI镜像的有效方式,而Podman允许我们使用熟悉的容器cli命令在生产环境中管理和维护这些镜像和容器。

容器迁移

套件安装
各大Linux发行版都提供了二进制安装包, 可以使用发行版的系统包管理工具一键安装:

Fedora, CentOS:sudo yum -y install podman
Arch & Manjaro Linux: sudo pacman -S podman


Ubuntu不支持一键安装,需要先添加第三方私有ppa仓库:

sudo apt-get update -qq
sudo apt-get install -qq -y software-properties-common uidmap
sudo add-apt-repository -y ppa:projectatomic/ppa
sudo apt-get update -qq
sudo apt-get -qq -y install podman

实践迁移

安装了套件的三个工具后,就可以对docker实例进行迁移了。

1、替换cron或者CI作业(脚本)中的所有docker实例,把docker替换为podman,可以使用后面提到的别名的方式。

2、停止和删除所有的运行的docker。

为了确保没有有差错,可以使用sysdig来捕获系统中docker的引用,看看是否还有其他东西在调用docker。
3、删除docker

现在就可以删除docker了:

yum remove docker
或者 apt remove -y docker-ce

当然虫虫教你一招更绝的,那就是用别名:

alias docker = podman

4、环境清理

最后清理下dock文件,我们建个一目录docker备份目录,把以下目录mv到备份目录即可:/etc/docker/*/etc/default/docker/var/lib/ docker中的任何遗留文件


删除docker组

delgroup docker

总结

本文介绍了符合CIR标准的 cri-o 容器套件Podman,Skopeo和Buildah。该新一代容器套件架构基于*nix传统的fork-exec模型,解决了由于docker守护程序导致的启动和安全问题,提提高了容器的性能和安全。

你可能感兴趣的:(manjaro安装docker)