我有一台96G RAM服务器,我想在它上面运行一些Spring启动应用程序。他们都需要MySql DB。
我很难确定利用服务器获得最佳隔离和性能的最佳方法是什么。
我正在考虑以下事项:
现在我应该直接在VM中运行mysql / spring启动,还是在docker中运行它们?这样做,我看不到任何直接的好处。但是如果我以后需要为我的应用程序创建一个集群,那么拥有一个docker图像会更好吗?
或者,如果你是我,你会做什么?
由于
答案 0 :(得分:1)
您正在寻找的是Docker Swarm。它允许您部署docker(高效虚拟容器)并随意扩展它们。
To" dockerize"你的春季启动应用程序,你只需要使用Dockerfile构建一个图像,如下所示:
FROM java:8
VOLUME /tmp
ADD spring-boot-0.0.1-SNAPSHOT.jar springboot-appname.jar
RUN bash -c 'touch /springboot-appname.jar'
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/springboot-appname.jar"]
要构建此图像,请执行:
docker build -t name-application-img .
要将图像作为服务部署在Docker Swarm中,请使用:
docker service create -p {exposed-port}:{private-port} --name {service-name} --replicas 1 name-application-img
答案 1 :(得分:1)
您想要最佳隔离和性能吗?
信任Docker容器提供的隔离。这是一个主要的设计目标 不要添加不必要的层(即托管Docker容器的VM) - 添加VM层会对性能产生影响,听起来你不必这样做。
包容性MySQL需要思考,因为它本质上是有状态的 如果你想这样做:我至少将状态(数据和可能配置)存储在容器之外。
你可以通过而不是来控制MySQL。我不认为数据库非常适合集装箱用例,因为:
您还应该考虑使用托管数据库,例如Amazon RDS。我知道你有一台你想要使用的高性能计算机,但是值得权衡这一点与自己维护和扩展基础设施的运营成本相比。
是的:我会为每个Spring Boot应用程序创建一个容器,并直接运行这些容器。正如我所说的那样:相信Docker的孤立 - 或至少查看它是否被破坏,以及根据您的威胁模型这是否是可接受的风险(以及VM是否会在任何报告的漏洞情况下保存您)。
至于哪里部署这些Docker容器(即在本地快速计算机上,而不是部署到云端):取决于您是否要优化运营成本(即更容易管理所有内容)云,而不必与任何物理机器交互)或尝试充分利用您的快速计算机(并将所有内容直接部署到该计算机)。
据推测,有一些方法可以远程管理快速计算机上Docker容器的编排。这可以为您提供部署到云的许多好处。
答案 2 :(得分:0)
您可以创建Spring Boot应用程序的Docker镜像,它们易于构建和扩展和缩放。为什么不将MySQL作为Docker镜像移动并将卷映射到磁盘。如果你有docker里面的所有应用程序,它们将很容易管理(通过docker-compose)。
然而,缺点是如果你有多个MySQL-DB容器,那么你必须担心数据复制并在多个数据库容器中保持相同的DB状态
如果我是你,我会把Spring Boot应用程序停靠!