首页 > 解决方案 > 为具有多个依赖项的现有应用程序拥有一个 docker 映像是否可行

问题描述

我是 Docker 新手,想了解现实生活中的挑战。

我有一个托管在 IIS 上的应用程序,并且依赖于 SQL Express 和 SOLR。

我想了解以下内容:

  1. 是否可以在一个容器中进行整个设置,包括启用 IIS、SQL、SOLR 和我的应用程序?
  2. 如果第1点可行,我应该如何开始?

对不起,如果我的问题是基本的。

标签: dockerdockerfile

解决方案


这是可行的,只是不是一个好习惯。您希望隔离软件堆栈以提高可维护性(更易于部署更新)、模块化(您可以在不同的项目中重用某个组件,甚至让多个项目重用同一个映像)和安全性(组件中的软件漏洞)堆栈几乎无法到达不同的组件)。

因此,我建议不要将所有内容放在同一个映像中,而是使用Docker Compose为堆栈的每个组件创建多个映像(您甚至可以从Docker Hub拉取通用的、最新的映像)并从Compose 文件,因此只需一个命令,您就可以启动应用程序工作所需的所有组件。

话虽如此,将所有堆栈放在同一个 Dockerfile 中是可行的,但这将是一个重要的混乱。您将需要一个 Dockerfile 来安装所需的所有软件,这将使其体积庞大且难以维护。如果您真的愿意,则必须从基本的操作系统映像(可能是Windows Server Core IIS)开始,然后从那里开始手动安装所有其他软件。如果您需要安装其他组件的 Dockerfile,并且它们共享相同的基本映像或兼容的映像,您可以直接将内容复制粘贴到您的 Dockerfile 中,但要以所述可维护性为代价。

此外,您绝对应该使用来保证您的数据安全,尤其是如果您采用这种整体方法,因为否则您可能会从数据库中丢失数据。

TL; DR:是的,你可以,但你真的不想这样做,因为有更好的替代品几乎同样困难。


推荐阅读