芜湖网站备案咨询电话网站首页幻灯片不显示
web/
2025/9/26 15:11:49/
文章来源:
芜湖网站备案咨询电话,网站首页幻灯片不显示,电子商务网站建设的步骤一般为,智慧团建电脑版注册登录入口docker集群Docker非常适合在单个节点上运行隔离的容器。 但是#xff0c;大多数软件系统都在多个节点上运行#xff0c;因此#xff0c;除了Docker之外#xff0c;我们还需要某种方法来指定哪些容器应在哪些节点上运行。 我要解决的特定问题如下#xff1a;我有两个Scala… docker集群 Docker非常适合在单个节点上运行隔离的容器。 但是大多数软件系统都在多个节点上运行因此除了Docker之外我们还需要某种方法来指定哪些容器应在哪些节点上运行。 我要解决的特定问题如下我有两个Scala守护程序我想在多个节点上运行取决于配置每个节点可以运行一个或两个守护程序。 我想要一种在集群中部署修改后的二进制文件的快速方法。 我也不想花费太多时间来设置服务器。 我的Gentoo日子已经过去了。 我到达的最终解决方案涉及Docker OpsWorks Chef和Vagrant 。 但是一步一步来。 顺便说一句-您将如何解决上述问题 请评论。 打包Java / Scala应用程序 首先我需要能够打包和上传二进制文件。 在这里Docker非常完美。 我编写了一个简单的Dockerfile 其中 基于受信任的ubuntu java7映像–无需在服务器上安装Java 将胖子从我的磁盘复制到映像 指定使用复制的jar运行Java的入口点 完整的Dockerfile可以在这里找到 https ://gist.github.com/adamw/166b82ec04c9c0f67453。 有了这样的映像我可以将其推送到公共或私有 Docker注册表中 群集中的节点可以在该注册表中进行下载。 如果需要我还可以安装我的应用程序需要的任何其他操作系统级别的依赖项而不必担心版本冲突并在实际服务器上进行设置。 如果看一下Dockerfile您可能会注意到有两个jar。 这样做是为了最小化每次代码更改后必须上传的Docker映像的大小。 第一个jar仅包含依赖项Scala库日志记录库框架等。 第二个jar包含已编译的应用程序代码。 从Dockerfile构建Docker映像时将创建一系列中间映像每个步骤之后一个。 对于涉及相同文件的相同命令不会创建新映像但是会从Docker缓存中重新使用映像。 依赖关系很少改变因此通常dep-jar保持不变因此缓存的版本会被重用并且中间映像会上传一次。 另一方面应用程序代码始终会更改。 重要的是首先将依赖项jar添加到映像中以便中间映像包含dep但不包含应用程序代码更改后的代码。 最后通常只需要上传2-3MB。 不过这里要注意一件事。 在确定是否可以在ADD命令该命令将文件从本地磁盘复制到该映像之后重新使用该映像时Docker仅检查该文件的最后修改时间戳。 这将导致依赖项fat-jar在每次重新构建时都被重新添加即使它们是相同的。 因此我创建了一个简单的bash脚本仅当其md5校验和发生更改时该脚本才会复制dockerfile旁边的fat-jar作为Docker上下文的一部分从该文件上传 https : //gist.github.com/adamw/ ba5d8b79ff553fba83fd 。 如何使用SBT创建这样两个单独的jar 非常简单。 只需使用SBT Assembly插件并更改其设置即可 assemblyOption in assembly ~ { _.copy(includeBin true, includeScala false, includeDependency false) } 然后 assemblyPackageDependency目标将创建仅依赖项的jar而assembly将创建仅应用程序的jar。 设置服务器 随着包含我们应用程序的Docker镜像在云中在Docker集线器上在等待现在是时候设置服务器了Docker守护程序将在其中运行容器。 为了配置服务器我选择了Amazon OpsWorks的Chef这有两个原因可以使用Stacks和Layers清楚地分离和组织EC2实例这些服务器与Chef具有现成的集成并且使用自定义厨师食谱非常容易。 完全不需要手动实例设置 以下步骤部分是摘要部分是ShopIgniter博客上描述的内容的扩展。 Chef安装程序由OpsWorks运行将是最少的并且仅包括运行Docker所需的内容。 首先我们需要创建一个具有更新内核的基于Ubuntu 12.04的AMI14.04尚不适用于OpsWorks–有关详细信息请参阅ShopIgniter的博客。 其次我们将使用自定义的厨师食谱 为此您需要创建一个专用的存储库例如在GitHub上。 食谱非常基本和简单 https : //gist.github.com/adamw/792f8c22abb09699b6d5 。 总结一下 docker::setup安装Docker docker::kill_containers杀死并删除所有正在运行的容器 docker::myapp从Docker注册表中提取myapp映像并运行一个容器该容器具有例如Chef-JSON配置文件的每个应用程序部分中指定的命令行参数和环境变量此处我们的应用程序使用单个命令-line参数并且需要环境中的AWS凭证 {myapp: {image: adamw/myapp:latest,cmdline: [ com.softwaremill.myapp.Main, 10 ],env: {AWS_ACCESS_KEY_ID: “...,AWS_SECRET_ACCESS_KEY: “...}}
}配置OpsWorks 要配置OpsWorks我们需要使用自定义Chef食谱和自定义配置JSON创建一个Stack例如上面的示例对于要运行的每个应用程序/容器类型我们需要在配置JSON中有一个部分。 其次对于我们要部署的每个应用程序容器我们需要创建一个图层。 由于这些层只能运行Docker因此我们不使用任何预配置的层而使用“自定义”层。 该层将包含我们的自定义配方在Setup阶段我们需要使用docker::setup配方在Deploy阶段我们需要使用docker::kill_containers和docker::kill_containers docker::myapp配方。 现在每次在该层上运行Deploy阶段时Docker都会提取映像并运行指定的容器 通过创建具有适当配方的图层我们可以在任何节点上启动容器的任何组合。 运行部署阶段 要一次单击即可实际运行Deploy阶段我们需要创建一个虚拟的OpsWorks应用程序只需选择“类型其他”和“存储库类型其他”。 现在每次要在服务器上部署应用程序运行更新的Docker容器时只需将此虚拟应用程序部署在所需的实例或层上即可。 这也可以通过API调用来完成就像AWS上的一切一样 因此构建应用程序创建Docker映像推送该映像以及在OpsWorks上运行部署的整个过程可以非常容易地实现自动化-例如在成功构建之后。 一切就绪之后我们现在可以将新实例添加到图层启动和停止它们并让多节点集群运行我们的应用程序 要更新应用程序只需将二进制文件推送到注册表即可。 在本地测试厨师 虽然Chef的食谱非常少但仍然可以在本地对其进行测试仍然很有用。 使用Vagrant可以轻松实现。 使用Vagrant我们可以轻松地创建安装了Chef的虚拟机该虚拟机运行我们的配方从而运行Docker容器。 此特定情况的Vagrantfile在这里 https ://gist.github.com/adamw/bf6fa803b6b13fd7430b。 Vagrantfile包含对我们正在开发的Chef食谱的引用通过chef.cookbooks_path 并且具有与OpsWorks中使用的相同的配置JSON。 发布vagrant up 我们将运行虚拟机。 更改食谱或上载新容器后我们可以通过使用vagrant provision --provision-with chef_solo轻松地重新运行Chef食谱。 加起来 我们最终得到以下关注点分离 Docker –在隔离的容器中运行应用程序具有所有必需的依赖关系 Chef –在定义的节点上设置docker运行并链接具有指定参数/环境的容器 OpsWorks –管理实例触发部署 流浪汉–整个设置的本地测试 尽管在上述整个过程中肯定有一些事情可以简化我希望Atomic项目能够做到这一点最后在集群中轻松地部署新版本的修改后的应用程序是轻而易举的这提供了开发环境。 翻译自: https://www.javacodegeeks.com/2014/06/cluster-wide-javascala-application-deployments-with-docker-chef-and-amazon-opsworks.htmldocker集群
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/82251.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!