Docker和OpenVZ的区别

58

我是虚拟化领域的新手,能有人向我解释一下OpenVZ和Docker之间的区别吗?

哪个在未来更有前途呢?

它们各自的优缺点是什么?


没有人是openVZ和Docker两方面的专家。 - forum.test17
我会说http://aucouranton.com/2014/06/13/linux-containers-parallels-lxc-openvz-docker-and-more/是一个好答案 :) - Alexandre Dumont
1个回答

84

两者对容器的看法完全不同。

简而言之 OpenVZ把容器看作虚拟专用服务器,而docker则把容器视为应用程序/服务。

这意味着什么? 对于OpenVZ,你可以期望创建容器就像制作虚拟服务器一样。 OpenVZ有着重于设置VPS容器的接口,您可以手动修饰它们。因此,他们提供了空Linux机器的模板,您可以启动和关闭它们,随后通过SSH访问它们自己,并按照您需要的方式进行设置,例如LAMP堆栈。

当您想要设置LAMP堆栈时,您将像设置新服务器时那样操作。您将获得一个具有其自己的可公开访问的WAN IP和Ubuntu的虚拟以太网适配器的空Linux机器,并使用SSH访问它,然后使用您平常使用的包管理器(yum或apt)安装所有所需服务,并在配置文件中完成所需的设置。

对于Docker,您可以期望创建的容器是单个应用程序,只执行一个任务。因此,它可能需要其他容器来帮助它。(例如提供数据库的容器) Docker使定义容器内容变得非常容易,而不必实际启动其中任何一个,并且可以不断地创建全新的完全相同容器的实例。他们使用名为Dockerfiles的非常轻巧的模板来定义docker容器(映像)。

已经有大量的dockerfiles可以在Docker Hub中找到,请自行查看(就像免费糖果商店一样!:D):docker hub。通过使用拉取命令,这些dockerfiles生成的映像可以使用docker CLI工具轻松获取。

在docker中还可以轻松访问诸如端口转发,虚拟目录(以便您可以轻松访问主机上的文件)等功能,任何可执行程序都可以使用这些功能。

如果您想在docker中获取LAMP堆栈,则只需运行“docker run -d -p 80:80 tutum/lamp”即可。

这将拉取图像tutum/lamp,并在容器中以端口80向前转发到主机的端口80的守护进程(-d)运行,将内部Web服务暴露给外部。如您所见,与OpenVZ机器相比,它没有自己的IP地址。就像是在根机器上运行的Apache服务器一样。

与本地安装相比,优点是Docker使安装变得更加容易和无限可复制。此外,它不会在主机机器上储存大量文件,并为您的应用程序提供了安全边界。

大多数Docker镜像都有独特的功能,对于tutum/lamp镜像,请看这里。


2
非常感谢您详细的回答 :). 我有一些疑问。考虑一个需要一个mysql服务器和两个网络卡的tomcat apache的设置。在openVZ中,由于它是虚拟服务器,我可以在同一台机器上创建许多虚拟专用服务器,这可以很容易地实现。如何在Docker中实现这一点呢? - forum.test17
如果有人想了解更多关于Linux容器和Docker的内容,请阅读此链接:https://dev59.com/9mQo5IYBdhLWcg3wdPAa?rq=1 - forum.test17
1
你可以在两种解决方案中都实现你的设置。当你选择Docker时,你只需要转发容器化服务的端口,这样它们看起来就像是从Docker主机托管的一样。此外,你还可以选择将容器链接在一起,这样你就不需要将数据库暴露给网络。我个人会选择Docker,虽然有一定的学习曲线,但最终使用它来设置和安装应用程序要容易得多。我敢打赌,你肯定会在几天内爱上Docker的。 - RoyB
谢谢您的输入,您能给我一些开始的链接吗?我在某个地方读到过,我不能在Docker中运行MySQL服务器实例,并且不能从这里拥有2个以太网接口https://github.com/docker/docker/issues/1824。现在还无法实现这一点吗? - forum.test17
2
很棒的回答!我想补充一下,OpenVZ创建了一个“奇怪”的虚拟机(具有物理服务器的属性,init脚本,文件系统,网络接口,挂载点等),它没有专用内核。而Docker启动了一堆与主机隔离的服务,直到你停止它。当你停止Docker容器时,不要惊讶于容器的文件系统消失了(尽管有持久化的方法,但这不是Docker的默认意图)。 - Alec Istomin
显示剩余5条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接