您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 销售管理 > 如何使用Docker部署GoWeb应用程序
it外包如何提升你在构建、测试并部署GoWeb应用程序的方式,并且理解如何使用Semaphore来持续部署。简介大多数情况下Go应用程序被编译成单个二进制文件,web应用程序则会包括模版和配置文件。而当一个项目中有很多文件的时候,由于很多文件没有同步就会导致错误的发生并且产生很多的问题。在本教程中,你将学习如何使用Docker部署一个Goweb应用程序,并且认识到Docker将如何改进你的开发工作流及部署流程。各种规模的团队都会从这里所介绍的设置中受益。目标在本文结束后,你将:。对Docker有基本的了解,。发现在Docker将如何帮助你开发Go应用程序。学习如何为一个生产环境中的Go应用程序创建Docker容器。知道如何使用Semaphore持续地在你的服务器上部署Docker容器先决条件为了学习本教程,你讲需要:。在你的主机或者服务器上安装Docker。具有一台能够使用SSH密钥对SSH请求进行认证的服务器理解DockerDocker帮助你为应用程序创建一个单独的可部署单元。这个单元,也被称为容器,包含该应用程序需要的所有东西。它包括代码(或者二进制文件)、runtime(运行环境)、系统工具盒系统库。将所有必需的资源打包成一个单元将确保无论应用程序部署到哪里都有完全相同的环境。这也有助于维护一个完全相同的开发和生产配置,这在以前是很难追踪的。一旦开始,容器的创建和部署将自动完成。它消除了一大类问题。这些问题主要是由于文件没有同步或者开发和生产环境之间的差异导致的。Docker帮助解决了这些问题。it外包相比于虚拟机的优势容器提供了与虚拟机相似的资源分配和隔离优势。然而,相同之处仅此而已。一个虚拟机需要它自己的客户操作系统而容器共享主机操作系统的内核。这意味着容器更加轻量而且需要更少的资源。从本质上讲,一个虚拟机是操作系统中的一个操作系统。而另一方面的容器则更像是操作系统中的其它应用程序。基本上,容器需要的资源(内存、磁盘空间等等)比虚拟机少很多,并且具有比虚拟机快很多的启动时间。Docker在开发阶段的优势在开发中使用Docker的优势包括:。一个用于所有团队成员的标准开发环境。更新的依赖性集中化以及在任何地方都能使用相同的容器。在开发和生产中完全相同的环境。修复了可能只会出现在生产环境中的潜在问题为什么使用Docker运行一个GoWeb应用程序?多数Go应用程序时简单的二进制文件。这就引发一个问题-为什么使用Docker运行一个Go应用程序?一些使用Docker运行Go的理由包括:。Web应用程序通常都有模版和配置文件。Docker有助于保持这些文件与二进制文件的同步。Docker确保了在开发或生产中完全相同的配置。很多时候当应用程序可以在开发环境中正常工作时,在生产环境去无法正常工作。使用DOcker则把你从对这些问题的担心中解放了出来。。在一个大型的团队中主机、操作系统及所安装的软件可能存在很大的不同。Docker提供了一种机制来确保一致的开发环境配置。这将提升团队的生产力并且在开发阶段减少冲突和可避免问题的发生。创建一个简单的GoWeb应用程序在本文中味了演示,我们会用Go创建一个简单的Web应用程序。这个我们称之为MathApp的应用程序将:。探索不同数学运算的路径it外包。在视图中使用HTML模版。使用一个可配置的文件来定制化该应用程序。包含所选功能的测试访问/sum/3/6将显示一个包含3与6相加后结果的页面。同样的,访问/product/3/6将显示一个3和6乘积的页面。在本文中我们使用Beego框架。请注意你可以为你的应用亨旭使用任何框架(或者什么也不用)。最终的目录结构完成之后,MathApp的目录结构应该看起来如下:MathApp├──conf│└──app.conf├──main.go├──main_test.go└──views├──invalid-route.html└──result.html我们假设MathApp目录位于/app目录之中。应用程序的主文件时main.go,为主应用程序的根目录中。这个文件包含该应用的所有功能。一些main.go中的功能是使用main_test.go来测试的。views文件夹中包含视图文件invald-route.html和result.html。配置文件app.conf位于conf文件夹中。Beego使用该文件来定制化应用程序。应用程序文件的内容应用程序主文件(main.go)包含所有的应用程序逻辑。该文件的内容如下:*//main.go***package**main**import**(strconvgithub.com/astaxie/beego)*//Themainfunctiondefinesasingleroute,itshandler**//andstartslisteningonport8080(defaultportforBeego)***func**main(){*/*Thiswouldmatchrouteslikethefollowing:**/sum/3/5**/product/6/23**...***/*beego.Router(/:operation/:num1:int/:num2:int,&mainController{})beego.Run()}*//Thisisthecontrollerthatthisapplicationuses***type**mainController**struct**{beego.Controller}*//Get()handlesallrequeststotheroutedefinedabove***func**(c*mainController)Get(){*//Obtainthevaluesoftherouteparametersdefinedintherouteabove*operation:=c.Ctx.Input.Param(:operation)num1,_:=strconv.Atoi(c.Ctx.Input.Param(:num1))num2,_:=strconv.Atoi(c.Ctx.Input.Param(:num2))*//Setthevaluesforuseinthetemplate*c.Data[operation]=operationc.Data[num1]=num1c.Data[num2]=num2c.TplName=result.html*//Performthecalculationdependingonthe'operation'routeparameter***switch**operation{**case**sum:c.Data[result]=add(num1,num2)it外包**case**product:c.Data[result]=multiply(num1,num2)**default**:c.TplName=invalid-route.html}}**func**add(n1,n2int)int{**return**n1+n2}**func**multiply(n1,n2int)int{**return**n1*n2}在你的应用程序中,它可能被分割到多个文件中。然而,针对本教程的目的,我们希望事情简单化。测试文件的内容main.go文件有一些需要测试的功能。对于这些功能的测试可以在main_test.go中找到。该文件的内容如下://main_test.gopackagemainimporttestingfuncTestSum(t*testing.T){ifadd(2,5)!=7{t.Fail()}ifadd(2,100)!=102{t.Fail()}ifadd(222,100)!=322{t.Fail()}}funcTestProduct(t*testing.T){ifmultiply(2,5)!=10{t.Fail()}ifmultiply(2,100)!=200{t.Fail()}ifmultiply(222,3)!=666{t.Fail()}}如果你想进行持续的部署,那么对你的应用程序进行测试是特别有用的。如果你有了足够的测试,那么你可以持续地部署而不必担心在你的应用程序中出现错误。视图文件内容视图文件时HTML模版。应用程序使用它们来显示对请求的应答。result.html的内容如下:!--result.html--!--Thisfileisusedtodisplaytheresultofcalculations--!doctypehtmlhtmlheadtitleMathApp-{{.operation}}/title/headbodyThe{{.operation}}of{{.num1}}and{{.num2}}is{{.result}}/body/htmlinvalid-route.html的内容如下:!--invalid-route.html--!--Thisfileisusedwhenaninvalidoperationisspecifiedintheroute--!doctypehtmlhtmlheadtitleMathApp/titlemetaname=viewportcontent=width=device-width,initial-scale=1metacharset=UTF-8/headbodyInvalidoperation/body/html配置文件的内容app.conf是Beego用于配置应用程序的文件。它的内容如下:;app.confappname=MathApphttpport=8080runmode=dev在这个文件中:。appname是应用程序将要运行的进程的名字。httpport是应用程序将要监听的的端口。runmode声明了应用程序将要运行的模式。有效的指包括dev用于开发而prod用于生产。it外包的好处,并且向你展示在开发中使用Docker的必须步骤。配置Docker用于开发我们将使用dockerfile来配置Docker以便用于开发。针对开发环境,对其的配置应该满足以下的要求:。我们将使用上一节所提及的应用程序。这些文件无论从容器的内部还是外部都可以访问。我们将使用beego自带的bee工具。它用于在开发过程中在线地重新加载应用程序(在Docker容器的内部)。Docker将为应用程序开放8080端口。在我们的主机上,应用程序保存在/app/MathApp中。在Docker容器中,应用程序保存在/go/src/MathApp中。我们将为开发所创建的Dockerimage的名字是ma-image。我们将要运行的Docker容器的名字是ma-instance步骤一-创建Dockerfile如下的Dockerfile可以满足以上的要求:**FROM**golang:1.6*#Installbeegoandthebeedevtool***RUN**gogetgithub.com/astaxie/beego&&gogetgithub.com/beego/bee*#Exposetheapplicationonport8080***EXPOSE**8080*#Settheentrypointofthecontainertothebeecommandthatrunsthe**#applicationandwa
本文标题:如何使用Docker部署GoWeb应用程序
链接地址:https://www.777doc.com/doc-2518999 .html