使用最新版本的 Docker,您可以使用 Docker Links、Docker Volume 和 Docker Compose 轻松实现这一目标。有关这些工具的更多信息,请访问 Docker 站点。
回到您所提到的工作流:对于任何典型的 Java EE 应用程序,都需要应用程序服务器和数据库服务器。由于您在帖子中没有提到数据库是如何设置的,因此我假设您的开发环境将为每个开发人员提供单独的数据库服务器。
考虑到所有这些假设,我可以建议以下工作流程:
- 从官方镜像构建基础 Wildfly 应用服务器。你可以通过以下方式实现:“docker pull”命令
- 使用以下命令运行基本应用程序服务器:
docker run -d -it -p 8080:8080 -p 9990:9990 --name baseWildfly jboss/wildfly
应用程序服务器现在正在运行,您需要将其配置为连接到数据库服务器,并且还需要配置数据源设置和其他配置(如有必要)以启动 Java EE 应用程序。为此,您需要登录到Jboss容器的bash终端:
docker exec -i -t baseWildfly /bin/bash/
您现在在集装箱的码头。您可以像配置任何 Linux 环境一样配置应用程序服务器。
您可以通过手动将 WAR 文件部署到 Wildfly 来测试配置。这可以通过管理控制台,maven插件或ADD命令轻松完成,如您所说。我通常使用管理控制台执行此操作,只是为了快速测试。验证配置是否正常工作后,可以删除 WAR 文件并创建容器的快照:
docker commit --change “add base settings and configuration” baseWildfly yourRepository:tag
现在,您可以将创建的映像推送到专用存储库,并与开发团队共享。他们现在可以拉取映像并运行应用程序服务器以立即部署。
我们不想使用管理控制台为每个Maven版本部署WAR文件,因为这太麻烦了,所以下一个任务是使用Docker Volume自动执行它。
假设您已将 Maven 配置为将 WAR 文件构建为 “../your_project/deployments/“,您可以将其链接到 Jboss 容器的部署目录,如下所示:
docker run -d -p 8080:8080 -v ../your_project/deployments:/opt/jboss/wildfly/standalone/deployments
现在,每次使用 Maven 重建应用程序时,应用程序服务器都会扫描更改并重新部署 WAR 文件。
为每个开发人员设置单独的数据库服务器也是非常有问题的,因为他们必须在容器中自行配置它,因为他们可能具有不同的设置(例如.db的url,用户名,密码等)。所以,最终把它做成是件好事。
假设您使用Postgres作为数据库服务器,则可以从postgres官方存储库中提取它。准备好映像后,可以运行数据库服务器:
docker run -d -p 5432:5432 -t --name postgresDB postgres
或者使用链接的“data”目录运行数据库服务器:
docker run -d -p 5432:5432 -v ../your_postgres/data:/var/lib/postgresql -t --name postgresDB postgres
第一个命令会将数据保存在容器中,而后一个命令会将数据保存在主机环境中。
现在,您可以将数据库容器与 Wildfly 链接:
docker run -d -p 8080:8080 --link postgresDB:database -t baseWildfly
以下是链接的输出:
现在,您可以为开发人员团队中的所有成员提供相同的环境,并且他们只需最少的设置即可开始编码。
相同的基础镜像可以用于生产环境,这样,每当你想发布新版本时,你只需要将WAR文件复制到主机的“your_deployment”文件夹中。
对应用程序服务器和数据库服务器进行 Docker 化的好处是,您可以在将来轻松地对其进行集群以对其进行扩展或应用高可用性。