docker - 为具有多个依赖项的现有应用程序拥有一个 docker 映像是否可行
问题描述
我是 Docker 新手,想了解现实生活中的挑战。
我有一个托管在 IIS 上的应用程序,并且依赖于 SQL Express 和 SOLR。
我想了解以下内容:
- 是否可以在一个容器中进行整个设置,包括启用 IIS、SQL、SOLR 和我的应用程序?
- 如果第1点可行,我应该如何开始?
对不起,如果我的问题是基本的。
解决方案
这是可行的,只是不是一个好习惯。您希望隔离软件堆栈以提高可维护性(更易于部署更新)、模块化(您可以在不同的项目中重用某个组件,甚至让多个项目重用同一个映像)和安全性(组件中的软件漏洞)堆栈几乎无法到达不同的组件)。
因此,我建议不要将所有内容放在同一个映像中,而是使用Docker Compose为堆栈的每个组件创建多个映像(您甚至可以从Docker Hub拉取通用的、最新的映像)并从Compose 文件,因此只需一个命令,您就可以启动应用程序工作所需的所有组件。
话虽如此,将所有堆栈放在同一个 Dockerfile 中是可行的,但这将是一个重要的混乱。您将需要一个 Dockerfile 来安装所需的所有软件,这将使其体积庞大且难以维护。如果您真的愿意,则必须从基本的操作系统映像(可能是Windows Server Core IIS)开始,然后从那里开始手动安装所有其他软件。如果您需要安装其他组件的 Dockerfile,并且它们共享相同的基本映像或兼容的映像,您可以直接将内容复制粘贴到您的 Dockerfile 中,但要以所述可维护性为代价。
此外,您绝对应该使用卷来保证您的数据安全,尤其是如果您采用这种整体方法,因为否则您可能会从数据库中丢失数据。
TL; DR:是的,你可以,但你真的不想这样做,因为有更好的替代品几乎同样困难。
推荐阅读
- go - 读取用户输入并将其拆分为两个 float64 数字
- c# - 将 EF 迁移迁移到 EFCore
- php - 如何将两个不同数组中的两个 ID 插入到数据库表中?
- excel - VBA 继续,无需等待第二个工作簿打开/关闭
- c++ - 等待两个条件
- mysql - 如何检查逗号分隔的列是否包含逗号分隔字符串中的单词
- android - 使用cordova-android 6.4.0 构建cordova-plugin-xapkreader
- kendo-ui - 自定义下拉菜单作为剑道树中的项目
- machine-learning - 二进制分类的准确率低于 50%
- azure-service-fabric - Service Fabric 中的多个 v2 服务远程处理终结点