我有一个 Java 应用程序,需要 MySQL/MariaDB 数据库才能工作。我的目标是为其构建一个独立的 Docker 镜像。我查阅了很多教程,但它们似乎与我想要实现的目标相矛盾。这让我一开始就怀疑我的目标是否合适,但我仍然不明白为什么它不是一个合理的目标。
我不喜欢共享 MySQL 服务器以在其上拥有多个数据库。唯一重要的是应用程序的数据库在那里,没有别的。
继续构建此类 Docker 镜像的正确方法是什么?
我是否使用 docker-compose 创建两个容器,一个用于数据库,一个用于 Java 应用程序?这就是大多数人的建议,但我想要一个可以从注册表中提取并且开箱即用的镜像。
我是否可以从 MySQL/MariaDB 镜像制作单个镜像并向其中添加 Java 和我的应用程序?
我是否可以从 OpenJDK 镜像创建单个镜像并向其中添加 MySQL/MariaDB 和我的应用程序?
还有其他方法吗?
非常感谢
最佳答案
docker 镜像被设计为运行单个命令,因此尽管您可以将应用程序文件添加到 MySQL 镜像(反之亦然),但您将很难同时运行这两个命令。
您使用 docker-compose 走上了正确的道路——它可以让您定义两个容器以及它们的运行方式。这实际上可能为您提供比独立容器更简单的部署。
您可能还希望考虑根本不运送 MySQL 容器。为什么不让您的应用程序能够创建所需的数据库,并为用户添加一个配置选项来告诉它在哪里可以找到数据库服务器?如果用户选择使用 Docker 化的 MySQL 实例,他们只需拉取普通 mysql:latest
镜像并自行配置端口。
或者,一旦您将该功能添加到应用程序中,您就可以使用普通 MySQL 实例发布 Compose 解决方案,只需要一个自定义 Dockerfile。
关于java - 使用专有 MySQL DB 对 Java 应用程序进行 Docker 化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53298908/