将多层应用程序作为单个 Docker 容器运行的最佳实践是什么?

将多层应用程序作为单个 Docker 容器运行的最佳实践是什么?

我的应用程序需要运行不同的服务(每个服务都有一个相应的 Dockerfile,无论是开源的还是我维护的):

  1. 数据库(从运行mariadb 公共 docker 镜像
  2. API(我维护的 JAR 档案;它继承自openjdk 公共 docker 镜像
  3. 一个 Web 客户端(一堆静态 HTML/CSS/JS,也是我维护的;它的 docker 文件继承自公共 docker 镜像
  4. 未来将添加一些其他客户端
  5. 代理是任何请求的入口点。(直接从nginx 公共 docker 镜像

到目前为止,每个块都是由 docker 镜像定义的,因为我认为这是运行它的更好方式(至少在本地)。现在我有了一个可以运行的应用程序,我希望能够部署它作为 docker-compose 队列中的单个容器

到目前为止,我尝试实现这一点的方法如下:在我的代码库中,我维护的每个镜像(API 和客户端)都是父主项目的 git 子模块。在该主项目中,我有另一个 Dockerfile 继承自docker 撰写公共 docker 镜像。此主映像将保存其他容器的配置文件(因为它是共享的),通过其自己的组合文件启动所有子映像并将配置文件挂载为卷。此主映像将是我(和其他潜在最终用户)稍后添加到组合文件中的映像。

这种方法的问题在于,所有子容器都出现在与其父容器相同的组合环境中,并且我看到的不是只一个容器(主容器)添加到容器群中,而是一堆容器。

现在看来,他们没有办法完全实现我想要实现的目标。我正在考虑从头开始启动主映像,并让其手动安装数据库和我的所有服务。但是使用这种方法,我失去了很多容器优势,所以我可能错过了实现这种目标的好方法。

无论如何,如果您有任何更好的方法建议;或者如何以我最后提到的干净的方式做到这一点,我将不胜感激。

多谢。

相关内容