这篇文章主要讲解了“Docker中怎么部署并使用Go”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Docker中怎么部署并使用Go”吧!

Go 是一个开源的编程语言,它能让构造简单、可靠且高效的软件变得容易。Go是从2007年末由Robert Griesemer, Rob Pike, Ken Thompson主持开发,后来还加入了Ian Lance Taylor, Russ Cox等人,并最终于2009年11月开源,在2012年早些时候发布了Go 1稳定版本。现在Go的开发已经是完全开放的,并且拥有一个活跃的社区。

用 Go 语言创建一个 “Hello World” web 应用

首先我们为 Go 应用创建一个目录,它会在浏览器中显示 “Hello World”。创建一个 web-app 目录并使它成为当前目录。进入 web-app 应用目录并编辑一个名为 main.go 的文件。

root@demohost:~#mkdirweb-approot@demohost:~#cdweb-app/root@demohost:~/web-app#vim.tinymain.gopackagemainimport("fmt""net/http")funchandler(whttp.ResponseWriter,r*http.Request){fmt.Fprintf(w,"Hello%s",r.URL.Path[1:])}funcmain(){http.HandleFunc("/World",handler)http.ListenAndServe(":8080",nil)}

使用下面的命令运行上面的 “Hello World” Go 程序。在浏览器中输入 http://127.0.0.1:8080/World 测试,你会在浏览器中看到 “Hello World”。

root@demohost:~/web-app#PORT=8080gorunmain.go

下一步是将上面的应用在 docker 中容器化。因此我们会创建一个 dockerfile 文件,它会告诉 docker 如何容器化我们的 web 应用。

root@demohost:~/web-app#vim.tinyDockerfile#得到最新的golangdocker镜像FROMgolang:latest#在容器内部创建一个目录来存储我们的web应用,接着使它成为工作目录。RUNmkdir-p/go/src/web-appWORKDIR/go/src/web-app#复制web-app目录到容器中COPY./go/src/web-app#下载并安装第三方依赖到容器中RUNgo-wrapperdownloadRUNgo-wrapperinstall#设置PORT环境变量ENVPORT8080#给主机暴露8080端口,这样外部网络可以访问你的应用EXPOSE8080#告诉Docker启动容器运行的命令CMD["go-wrapper","run"]构建/运行容器

使用下面的命令构建你的 Go web-app,你会在成功构建后获得确认。

root@demohost:~/web-app#dockerbuild--rm-tweb-app.SendingbuildcontexttoDockerdaemon3.584kBStep1:FROMgolang:latestlatest:Pullingfromlibrary/golang386a066cd84a:Alreadyexists75ea84187083:Pullcomplete88b459c9f665:Pullcompletea31e17eb9485:Pullcomplete1b272d7ab8a4:Pullcompleteeca636a985c1:Pullcomplete08158782d330:PullcompleteDigest:sha256:02718aef869a8b00d4a36883c82782b47fc01e774d0ac1afd434934d8ccfee8cStatus:Downloadednewerimageforgolang:latest--->9752d71739d2Step2:RUNmkdir-p/go/src/web-app--->Runningin9aef92fff9e8--->49936ff4f50cRemovingintermediatecontainer9aef92fff9e8Step3:WORKDIR/go/src/web-app--->Runningin58440a93534c--->0703574296ddRemovingintermediatecontainer58440a93534cStep4:COPY./go/src/web-app--->82be55bc8e9fRemovingintermediatecontainercae309ac7757Step5:RUNgo-wrapperdownload--->Runningin6168e4e96ab1+execgoget-v-d--->59664b190feeRemovingintermediatecontainer6168e4e96ab1Step6:RUNgo-wrapperinstall--->Runningine56f093b6f03+execgoinstall-vweb-app--->584cd410fdcdRemovingintermediatecontainere56f093b6f03Step7:ENVPORT8080--->Runningin298e2a415819--->c87fd2b43977Removingintermediatecontainer298e2a415819Step8:EXPOSE8080--->Runningin4f639a3790a7--->291167229d6fRemovingintermediatecontainer4f639a3790a7Step9:CMDgo-wrapperrun--->Runningin6cb6bc28e406--->b32ca91bdfe0Removingintermediatecontainer6cb6bc28e406Successfullybuiltb32ca91bdfe0

现在可以运行我们的 web-app 了,可以执行下面的命令。

root@demohost:~/web-app#dockerrun-p8080:8080--name="test"-dweb-app7644606b9af28a3ef1befd926f216f3058f500ffad44522c1d4756c576cfa85b

进入 http://localhost:8080/World 浏览你的 web 应用。你已经成功容器化了一个可重复的/确定性的 Go web 应用。使用下面的命令来启动、停止并检查容器的状态。

###列出所有容器root@demohost:~/dockerps-a###使用id启动容器root@demohost:~/dockerstartCONTAINER_ID_OF_WEB_APP###使用id停止容器root@demohost:~/dockerstopCONTAINER_ID_OF_WEB_APP重新构建镜像

假设你正在开发 web 应用程序并在更改代码。现在要在更新代码后查看结果,你需要重新生成 docker 镜像、停止旧镜像并运行新镜像,并且每次更改代码时都要这样做。为了使这个过程自动化,我们将使用 docker 卷在主机和容器之间共享一个目录。这意味着你不必为在容器内进行更改而重新构建镜像。容器如何检测你是否对 web 程序的源码进行了更改?答案是有一个名为 “Gin” 的好工具 https://github.com/codegangsta/gin,它能检测是否对源码进行了任何更改,然后重建镜像/二进制文件并在容器内运行更新过代码的进程。

要使这个过程自动化,我们将编辑 Dockerfile 并安装 Gin 将其作为入口命令来执行。我们将开放 3030 端口(Gin 代理),而不是 8080。 Gin 代理将转发流量到 web 程序的 8080 端口。

root@demohost:~/web-app#vim.tinyDockerfile#得到最新的golangdocker镜像FROMgolang:latest#在容器内部创建一个目录来存储我们的web应用,接着使它称为工作目录。RUNmkdir-p/go/src/web-appWORKDIR/go/src/web-app#复制web程序到容器中COPY./go/src/web-app#下载并安装第三方依赖到容器中RUNgogetgithub.com/codegangsta/ginRUNgo-wrapperdownloadRUNgo-wrapperinstall#设置PORT环境变量ENVPORT8080#给主机暴露8080端口,这样外部网络可以访问你的应用EXPOSE3030#启动容器时运行GinCMDginrun#告诉Docker启动容器运行的命令CMD["go-wrapper","run"]

现在构建镜像并启动容器:

root@demohost:~/web-app#dockerbuild--rm-tweb-app.

我们会在当前 web 程序的根目录下运行 docker,并通过暴露的 3030 端口链接 CWD (当前工作目录)到容器中的应用目录下。

root@demohost:~/web-app#dockerrun-p3030:3030-v`pwd`:/go/src/web-app--name="test"-dweb-app

打开 http://localhost:3030/World, 你就能看到你的 web 程序了。现在如果你改变了任何代码,会在浏览器刷新后反映在你的浏览器中。

感谢各位的阅读,以上就是“Docker中怎么部署并使用Go”的内容了,经过本文的学习后,相信大家对Docker中怎么部署并使用Go这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!