Docker并不是独一的容器化工具,能够还有更好的选择……
在容器的早期时代(其实更像是4年前),Docker是容器游戏中独一的玩家。但如今状况曾经不一样了,Docker不再是独一的一个,而只是其中一个容器引擎而已。Docker允许我们构建、运转、拉、推或反省容器镜像,但是关于每一项义务,都有其他的替代工具,甚至能够比Docker做得还要好。所以,让我们探求一下,然后再卸载(只是能够),直至完全遗忘Docker……
那,为什么不再用Docker了?
假设你曾经运用Docker很长时间了,估量要真正压服你去思索其他工具,得先提供些依据。
首先,Docker是一个单体工具。它尝试去涵盖一切的功用,通常这并不是最佳实际。大少数状况下,我们都是只选择一种专门的工具,它只做一件事,并且做得十分好,十分精。
假设惧怕切换到不同的工具集是由于将不得不学习运用不同的CLI、API或许说不同的概念,那么这不会是一个成绩。本文中展现的任何工具都可以是完全无缝的,由于它们(包括Docker)都遵照OCI (Open Container Initiative)下的相反标准。它们包含了容器运转时、容器分发和容器镜像的标准,其中涵盖了运用容器所需的一切特性。
有了OCI,你可以选择一套最契合你需求的工具,同时你依然可以享用跟Docker一样运用相反的API和CLI命令。
所以,假设你情愿尝试新的工具,那么让我们比较一下Docker和它的竞争对手的优缺陷和特性,看看能否有必要思索保持Docker,运用一些新的闪亮的工具。
容器引擎
在比较Docker和其他工具时,我们需求将其分解为组件,首先我们先讨论一下容器引擎。Container Engine是一种工具,它为处置镜像和容器提供用户界面,这样就不必处置SECCOMP规则或SELinux策略之类的事情。它的任务还包括从远程仓库提取镜像并将其扩展到磁盘。它看起来也是运转容器,但实践上它的任务是创立容器清单和带有镜像层的目录。然后它将它们传递到容器运转时,如runC或Crun(稍后我们将讨论这一点)。
目前曾经有许多容器引擎,但Docker最突出的竞争对手是由红帽开发的Podman。与Docker不同,Podman不需求Daemon来运转,也不需求root特权,这是Docker长期以来不断关注的成绩。基于它的名字,Podman不只可以运转容器,还可以运转pods。假设你不熟习pods的概念,其实,复杂的概括就是,Pod是Kubernetes的最小计算单元。它由一个或多个容器(主容器和执行支持义务的Sidecar)组成,这使得Podman用户以后更容易将他们的任务负载迁移到Kubernetes。因此,作为一个复杂的演示,这是如何在一个Pod中运转两个容器:
~ $ podman pod create --name mypod
~ $ podman pod list
POD ID NAME STATUS CREATED # OF CONTAINERS INFRA ID
211eaecd307b mypod Running 2 minutes ago 1 a901868616a5
~ $ podman run -d --pod mypod nginx # First container
~ $ podman run -d --pod mypod nginx # Second container
~ $ podman ps -a --pod
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES POD POD NAME
3b27d9eaa35c docker.io/library/nginx:latest nginx -g daemon o... 2 seconds ago Up 1 second ago brave_ritchie 211eaecd307b mypod
d638ac011412 docker.io/library/nginx:latest nginx -g daemon o... 5 minutes ago Up 5 minutes ago cool_albattani 211eaecd307b mypod
a901868616a5 k8s.gcr.io/pause:3.2 6 minutes ago Up 5
最后,Podman提供了与Docker完全相反的CLI命令,因此只需执行alias docker = podman并装作什么都没有改动。
除了Docker和Podman之外,还有其他的容器引擎,但我团体以为它们都是没什么出路的技术,或许都不太适宜本地开发和运用。但是,要片面了解,至少要看一下其中的内容:
(责任编辑:admin)