【问题标题】:Dockerizing Java application using exclusive MySQL DB使用专有 MySQL DB 对 Java 应用程序进行 Dockerizing
【发布时间】:2018-11-14 11:13:39
【问题描述】:

我有一个需要 MySQL/MariaDB 数据库才能工作的 Java 应用程序。我的目标是为它构建一个独立的 Docker 镜像。我查阅了许多教程,但它们似乎与我想要实现的目标相矛盾。这让我首先怀疑我的目标是否合适,但我仍然不明白为什么它不是一个合理的目标。

我不喜欢共享 MySQL 服务器以在其上拥有多个数据库。唯一重要的是应用程序的数据库在那里,没有别的。

继续构建这样一个 Docker 映像的正确方法是什么?

我是否使用 docker-compose 创建两个容器,一个用于 DB,一个用于 Java 应用程序?这似乎是大多数人的建议,但我想要一个可以从注册表中提取并且开箱即用的图像。

我是否从 MySQL/MariaDB 映像制作单个映像并将 Java 和我的应用程序添加到其中?

我是否从 OpenJDK 映像制作单个映像并将 MySQL/MariaDB 和我的应用程序添加到其中?

还有其他方法吗?

非常感谢

【问题讨论】:

    标签: java mysql docker docker-compose mariadb


    【解决方案1】:

    Docker 映像旨在运行单个命令,因此尽管您可以将应用程序文件添加到 MySQL 映像(反之亦然),但您很难同时运行这两个命令。

    您使用docker-compose 正朝着正确的方向前进——这将让您定义两个容器以及它们的运行方式。这实际上可能会为您提供比独立容器更简单的部署。

    您可能还希望考虑完全不提供 MySQL 容器。为什么不让您的应用程序能够创建所需的数据库,并为用户添加一个配置选项来告诉它在哪里可以找到数据库服务器?如果用户选择使用 dockerized MySQL 实例,他们可以直接拉取 vanilla mysql:latest 镜像并自行配置端口。

    或者,一旦您将该功能添加到您的应用程序,您就可以使用普通 MySQL 实例发布 Compose 解决方案,只需要一个自定义 Dockerfile。

    【讨论】:

    • 谢谢,但我恐怕还是不太明白:如果我把它做成容器的组合,是不是意味着我的应用程序的镜像永远无法运行本身?这不是否定了“你从注册表中提取它,它就可以工作,因为它里面有它需要的一切”的魔力吗?
    • 这不是 Docker 的魔力。它是一个围绕单个进程及其隔离存储和网络设置的依赖项的有效可移植包装(我可以将 MySQL 和 PostgreSQL 配置为以相同的方式侦听备用端口,而无需了解任一数据库的本地配置,例如)。几乎每一个真正有用的基于 Docker 的应用程序都需要多个容器,这很正常。
    猜你喜欢
    • 2016-07-13
    • 1970-01-01
    • 2019-06-08
    • 1970-01-01
    • 2018-08-22
    • 2018-12-24
    • 2019-06-29
    • 2021-09-30
    • 2021-07-03
    相关资源
    最近更新 更多