云服务器价格_云数据库_云主机【优惠】最新活动-搜集站云资讯

美国服务器_昂立教育企业邮箱_限量秒杀

小七 141 0

与Docker的持续集成和交付

这是JaroslavHolub的一个客博客,经许可重新发布。这篇文章最初发布在CloudBees Codeship网站上。持续交付的目的是通过在短时间内生成可靠的软件来降低风险和更快地交付价值。正如martinfowler所说,如果您的软件可以部署到整个it生命周期。你的团队优先考虑保持软件的可部署性,而不是开发新的特写。有人吗可以跑得很快,当有人对系统进行更改时,自动反馈系统的生产准备情况他们。你可以在上的任何环境中执行软件的任何版本的按钮式部署需求。集装箱化软件的使用使我们可以进一步改进这个过程。最大的改进是在速度和抽象级别上,这是进一步创新的基石领域。在这篇文章,我将向你展示如何使用Docker建立一个连续的交付管道。我们将了解如何将此工具用于Linux容器作为连续交付管道的一部分,使我们能够很好地封装服务的构建过程。它还允许我们通过几个简单的步骤来部署任何修订,我将在本文中主要使用术语"持续交付",因为它代表了通向最终目标的整个步骤。然而,持续集成是持续的最重要的部分交货。连续与DockerLet的集成以Go中编写的Hello World web服务器作为示例服务。你可以在Github上找到这个例子中使用的所有代码。持续集成的设置包括:运行单元测试构建我们用来构建服务的Docker映像运行构建容器并编译我们的服务构建我们运行并部署的Docker映像将最终映像自动推送到Docker注册中心本例中的测试运行测试是非常简单的:go test构建一个Docker映像单个服务集成的核心是在我们的案例。因为我们特意选择了一个程序来编译这个程序的可执行部分。我们最终将把可执行文件放在这个Docker中图像。现在有人可能会认为我们应该使用安装在主机上的构建工具来构建web服务器的可执行文件,然后以某种方式将二进制文件复制到Docker映像中。但这在集装箱运输领域是不允许的。让我们用容器来做吧。这样,我们就不会依赖于主机上安装的任何构建工具,它将使整个设置易于复制,并且封装。建筑一个可执行的Docker文件可以与一个运行时环境的一部分一起构建。或者我们可以把两者分开。在一个单独的构建过程中,我们最终会在Docker映像文件系统中获得额外的内容(构建过程的剩余部分),即使我们随后在Dockerfile。一些人们使用技巧在一个运行命令中创建、操作和删除不需要的东西。虽然它有时很方便,但我一般不推荐它;在我看来,这增加了Dockerfile的复杂性。当然,在某些情况下,您可能希望保留您的来源,并最终保留所有信息神器。那个然而,我推荐的方法是创建单独的"构建"和"分发"dockerfile。使用Dockerfile.build文件在软件的构建和使用过程中进行繁重的工作Dockerfile.dist文件创建可分发的Docker图像,如可能的。那个以下是Dockerfile.build文件. 如您所见,运行构建文件后,我们从golang映像创建容器,编译示例服务并输出二进制文件高朗:1.4运行mkdir-p/tmp/build ADD hello-世界。去吧/tmp/build/WORKDIR/tmp/build RUN go build你好-世界。去吧命令tar-czf-hello worldInDockerfile.dist文件,我们只使用此二进制文件并在运行时运行:FROM德比安:杰西运行mkdir/app添加构建.tar.gz/应用程序/入口点/app/hello world我们的建筑.sh脚本-我们的持续集成管道的重要部分-然后看起来像这样:#!/垃圾箱/垃圾箱docker构建-t hello world build-fDockerfile.build文件.docker运行hello world build>构建.tar.gzdocker构建-t hello world-fDockerfile.dist文件.如您所见,这三个简单的Docker命令为我们提供了一个干净的、小的Hello World Docker映像,可以随时部署和按需运行。一旦FROM子句中使用的两个映像都被本地拉取和缓存,我们的构建过程将是几毫秒或最多几秒钟的事情,而且资源非常少占地面积。储存Docker Images构建过程工件创建后,我们希望将其推送到Docker注册表,在哪里可以买到部署。请请注意,正确地标记图像是非常重要的。Docker生态系统受到"最新"标签使用的影响。如果您为每个新映像使用一个唯一的标记,那么您的所有映像版本都可以方便地在中进行部署未来。我们可以选择使用我们自己的Docker注册表还是依赖Docker Hub。在Docker Hub上,您可以存储公共或私有图像存储库。这也是人们首先会寻找你的图片的地方(如果你想让别人来找的话)。另一方面,你自己的Docker注册表可以让你完全控制图片的存储、性能和安全性。更高级的设置可以将两者结合起来接近。这个您可以使用适当的标记标记新图像并将其推送到公共中心(用实际值替换您的用户名和标记):\!/垃圾箱/垃圾箱docker tag你好-世界:最新的你的用户名/hello-世界:你的标签docker推你的用户名/hello-你的世界:你的标签连续交付的容器一旦我们的Docker图像构建管道工作正常,图像被很好地存储在存储库中,我们肯定希望得到我们的服务部署。如何部署应用程序取决于基础设施或云提供商。如今,一些云提供商在其API中支持Docker映像(例如,Amazon EC2容器服务、数字海洋或Giant Swarm)。您可以使用诸如apachemesos(阅读有关在Mesos上运行容器的更多信息)或googlekubernetes之类的资源抽象工具进一步利用容器化应用程序的功能,这些工具允许您在自己的容器中部署和管理容器方式。在以Hello World为例,远程部署意味着在安装了Docker的目标计算机上远程运行以下命令:\!/垃圾箱/垃圾箱docker停止hello生产docker run--rm-p8000:80--name hello production hello world使用DockerUsing容器化软件进行连续交付并不意味着要实现微服务。然而,容器支持这种架构模式,因为它们鼓励开发人员基于担心。微服务此外,还可以使用标准化且易于更换的管道,通过普通网络促进集装箱化组件之间的通信。为了了解更多关于微服务的知识,以及为什么它们可能是你的软件项目的一个好的架构模式,我建议Sam Newman构建微服务。一个包含容器化软件的连续交付管道也允许你建立一种新的测试环境;(micro)服务的子集部署在小集群中,这些集群表示被测系统在某些部分被故意禁用或断开连接。创建对于这样一个部署矩阵和针对它的编程在持续集成时间方面几乎没有额外的成本。它确实对生产中软件的稳定性和弹性产生了巨大的影响。这样的测试系统可以让团队做好应对任何混乱的准备猴子.PS:如果您喜欢这篇文章,您也可以下载与Docker电子书的持续集成和持续交付。如果您对CloudBees Codeship提供的Docker支持感兴趣,请单击此处。链接到其他资源为Go应用程序构建Docker容器使用DevOps技术人员培训如何思考阅读Kubernetes云原生应用程序的CI/CD