在容器中运行Spring启动应用程序? 还是VM? 或虚拟机内的容器?
我有一个96G的RAM服务器,我想运行几个春季启动应用程序。 他们都需要MySql DB。
我很难决定利用服务器获得最佳隔离和性能的最佳方式。
我在想以下几点:
- 只为MySql服务器创build一个虚拟机
- 每个弹簧引导应用程序的VM
现在我应该直接在VM中运行mysql / spring启动,还是在docker中运行它们? 我看不到这样做的直接好处。 但如果以后如果我需要为我的应用程序创build一个集群,那么有一个docker的图像会更好?
或者,如果你是我,你会怎么做?
谢谢
你想要最好的隔离和性能?
信任您的Docker容器提供的隔离。 这是一个主要的devise目标。
不要添加不必要的层(例如,托pipeDocker容器的VM) – 添加VM层会产生性能影响,听起来像您不需要。
容纳MySQL需要思考,因为它本质上是有状态的。
如果你想这样做:我至less将状态(数据和可能的configuration)存储在容器外。
你可以逃避不使用集装箱MySQL。 我不觉得数据库适合集装箱使用的情况,因为:
- 他们是有状态的
- 缩放并不像“旋转另一个实例”那样微不足道(因为你必须build立奴隶,同步和存储很多状态)
- 他们不经常更新
- 更新并不像“交换到容器的较新版本”那么简单
- 对于“在所有环境中使用相同的版本”的要求较less(即开发者在本地使用MariaDB 5.7,尽pipe生产使用了MySQL 5.6 …这是毫无用处的)
您还应该考虑使用托pipe数据库,如Amazon RDS。 我认识到你有一台高性能的计算机,你可以利用这个计算机,但是要衡量自己维护和扩展基础设施的运营成本是否值得。
是的:我会为每个Spring Boot应用程序创build一个容器,并直接运行这些容器。 正如我所说:信任Docker的隔离 – 或者至less查看是否被破坏,以及根据您的威胁模型(以及虚拟机是否已将您保存在任何已报告的漏洞情况下)是否是可接受的风险。
至于在哪里部署这些Docker容器(即在本地快速计算机上,还是部署到云中):取决于是否要优化运营成本(即更容易pipe理云上的所有内容,而不必与任何物理机械),或尝试充分利用您的快速计算机(并将所有内容直接部署到该计算机上)。
大概有一些方法可以远程pipe理快速计算机上的Docker容器的编排。 这可以给你很多的部署到云的好处。
你在找什么叫Docker Swarm。 它允许您部署泊坞窗(高效的虚拟容器),并通过任何努力来扩展它们。
为了“dockerize”你的spring引导应用程序,你只需要用Dockerfile构build一个图像,就像这样:
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"]
要构build这个图像,执行:
docker build -t name-application-img .
要将镜像作为Docker Swarm中的服务部署,请使用:
docker service create -p {exposed-port}:{private-port} --name {service-name} --replicas 1 name-application-img
您可以创buildSpring Boot应用程序的Docker镜像,它们非常容易构build和扩展和缩小。 甚至为什么不把MySQL作为一个Docker映像移动,并将卷映射到磁盘。 如果您拥有Docker中的所有应用程序,他们将很容易pipe理(通过docker-compose)。
然而,缺点是,如果您有多个MySQL-DB容器,那么您不得不担心数据复制,并在多个数据库容器之间维护相同的数据库状态
如果我是你,我只需要dockerize Spring Boot应用程序!
- Docker中的spring-cloud-config构成https证书未find
- SpringBoot与Tomcat使用大约190mb的内存。 什么过程在Springboot中运行?
- 已发布的服务在Docker群集上无法访问
- 微服务体系结构的零停机部署
- 在Windows上使用maven和spring-boot构buildDocker-Image
- elasticsearch 5.5.3 Java客户端API NoNodeAvailableException与docker
- 在PCF中的Docker – 无法通过AMQP(spring cloud bus)连接到rabbitmq
- Docker-compose从链接迁移到networkingMongoDB数据库问题
- 在Docker容器中访问主机上的MySQL数据库