我正在研究在一个实际部署到生产中的大型项目中使用 Docker。我以前从未使用过 Docker,但据我所知,它包含一个名为“容器引擎”的新布局,它使您有机会部署许多彼此独立的应用程序并使用主机的资源。
就我工作的情况而言,部署我们应用程序的机器可以具有不同的操作系统和架构,例如 Windows、Linux、arm、Debian 等……但它们没有任何正在运行的虚拟机,只有操作系统和我们部署的应用程序。
这些机器可以在同一系统上运行 4-5 个应用程序,每个应用程序都有不同的依赖关系。我们已经遇到了一些问题:例如文件描述符,其中一个应用程序从另一个应用程序获取日志写入,从而生成错误日志并崩溃。
这些应用程序通过 TCP/IP 套接字与机器的其他部分进行通信,并使用 gRPC、QPID 和 SFTP 与环境的其他元素(外部服务器、自己的库等)进行通信。我不知道使用这些协议是否会使我们系统中 docker 的实现变得复杂。
与我的同事交谈后,他们告诉我这不值得,因为它不会带来任何优化或好处,但我不这么认为。
我一直在阅读,通过使用容器,我们可以获得操作系统独立性,使应用程序使用docker镜像在不同的操作系统上运行,实现库独立性,从而实现应用程序之间的隔离。
是的,docker 主要用于将应用程序及其依赖项与其他应用程序隔离。网络服务是主要用例。
所以,您所描述的正是 docker 的用途。
您的同事似乎有点奇怪;我从未见过有经验的管理员说“哦,在同一台机器上运行具有冲突依赖关系的不同服务,我真的不认为这需要任何可靠的工具”。恰恰相反。每个明智的软件开发团队都有一个 CI 服务器,它在完全可重现、使用后可丢弃的环境中运行测试,如今每个人都使用容器。所以,也许少听听你的同事的意见,直接去做就好。