Docker 的适用性

Docker 的适用性

现在我有一堆服务器,只安装了裸机操作系统和软件。主要组件是 nginx、php-fpm、ffmpeg 和其他一些用于视频编码的工具。每小时通过 cron 服务器抓取视频转换任务,执行这些任务并将准备好的视频放入文件夹中。然后 Nginx 流式传输这些视频。

问题是我对同步配置文件、更新软件、分发从源代码编译的软件等感到非常厌倦。

所以我想首先我需要将视频文件和我拥有的所有软件分开。视频文件仍将保存在服务器本身上。对于软件容器,我可以使用 OpenVZ。因此,如果我需要更新软件,我只需更新我的 OpenVZ 模板并在每台服务器上复制此图像 + vzctl destroy + vzctl create。但我不知道将包含视频文件的目录安装到 OpenVZ 容器的好方法。我认为 NFS、iSCSI 对我来说不好,因为应该有更好的方法。

这就是为什么我认为 Docker 可能是一个很好的解决方案。据我所知,它允许仅使用 cli 调用将外部资源挂载到它。所以我只需构建一个包含 nginx + fpm + 视频工具的 docker 容器,将其分发到我的服务器中,并将文件附加到本地存储。

请写下你的意见。这是使用 docker 的好方法吗?还是我的解决方案是其他的?

答案1

如果没有更多信息,很难回答这个问题。但这里有一些关于 Docker 世界的想法。

首先,我会尝试将 Docker 镜像和容器更多地视为应用程序而不是虚拟机。将主机基础架构与 Docker 容器分开管理。在主机上运行 Puppet 或 Chef 来管理 Docker 容器和依赖项可能非常适用。一旦进入完全容器化的世界,您就可以通过运行 CoreOS 等平台来真正简化主机。但如果您刚刚接触 Docker,我可能不会从 CoreOS 开始。

分离您的应用程序和视频文件(您已经提到过)。构建“仅数据”容器,将视频文件保留在主机上。我喜欢tianon/true为此使用 Docker 映像。使用可以保留的卷运行映像:

docker run -d --name videodata -v /videodata tianon/true

听起来您接下来会为您的 nginx、PHP-FPM 和 ffmpeg 容器准备至少一个其他映像。不过,我可能会尝试将这些组件分离到单独的映像中。您可能有一个 PHP-FPM 容器,它运行您的代码并公开一个端口或套接字供 nginx 用于反向代理。此容器还将用于--volumes-from挂载持久/videodata文件夹。

docker run -d --name application --volumes-from videodata myorg/myappimage

然后你将拥有一个使用 Docker 链接 DNS 来访问 PHP-FPM 的 nginx 映像:

docker run -d --name web -p 80:80 --link application:phpfpm myorg/mynginximage

在 nginx 配置中您可以直接点击 DNS 名称phpfpm来解析应用程序容器的 IP 地址。

下一步的扩展将是更多地关注服务发现。你可以用类似这样的设备替换 nginx 镜像https://github.com/jwilder/nginx-proxy自动添加和删除应用程序容器。

一旦你开始进入多主机 Docker 世界,服务目录等工具和概念(https://github.com/progrium/docker-consul)、大使(https://github.com/progrium/ambassadord)、目录中的动态服务注册(https://github.com/progrium/registrator) 和负载平衡 (https://github.com/hashicorp/consul-haproxy)会更有趣。

因此,回答你的问题,我认为你有 Docker 的有效用例。但我不认为混合使用 OpenVZ 和 Docker 真的是一个好主意。你可能需要其中之一。

答案2

我认为您正在寻找像 Puppet、Chef、Ansible 或 CFEngine 这样的配置管理工具。

使用这些工具,您可以制作配置模板,然后将其应用于多台服务器。

基本上,当您在配置管理系统中完成配置系统后,您会在所有服务器上运行单个命令,然后应用该配置。

相关内容