嗨,在本教程中,我们将学习如何使用 docker 部署 golang web 应用程序。 你可能已经知道,由于 golang 的高性能和可靠性,docker 是完全是用 golang 写的。在我们详细介绍之前,请确保你已经安装了 docker 以及 golang 并对它们有基本了解。

关于 docker
Docker 是一个开源程序,它可以将应用及其完整的依赖包捆绑到一起,并打包为容器,与宿主机共享相同的 Linux 内核。另一方面,像 VMware 这样的基于 hypervisor 的虚拟化操作系统容器提供了高级别的隔离和安全性,这是由于客户机和主机之间的通信是通过 hypervisor 来实现的,它们不共享内核空间。但是硬件*也导致了性能的开销,所以容器虚拟化诞生了,以提供一个轻量级的虚拟环境,它将一组进程和资源与主机以及其它容器分组及隔离,因此,容器内部的进程无法看到容器外部的进程或资源。
用 Go 语言创建一个 “Hello World” web 应用
首先我们为 Go 应用创建一个目录,它会在浏览器中显示 “Hello World”。创建一个 web-app 目录并使它成为当前目录。进入 web-app 应用目录并编辑一个名为 main.go 的文件。
root@demohost:~# mkdir web-app
root@demohost:~# cd web-app/
root@demohost:~/web-app# vim.tiny main.go
package main
import (
"fmt"
"net/http"
)
func handler(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Hello %s", r.URL.Path[1:])
}
func main() {
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=8080 go run main.go
下一步是将上面的应用在 docker 中容器化。因此我们会创建一个 dockerfile 文件,它会告诉 docker 如何容器化我们的 web 应用。
root@demohost:~/web-app# vim.tiny Dockerfile # 得到最新的 golang docker 镜像 FROM golang:latest # 在容器内部创建一个目录来存储我们的 web 应用,接着使它成为工作目录。 RUN mkdir -p /go/src/web-app WORKDIR /go/src/web-app # 复制 web-app 目录到容器中 COPY . /go/src/web-app # 下载并安装第三方依赖到容器中 RUN go-wrapper download RUN go-wrapper install # 设置 PORT 环境变量 ENV PORT 8080 # 给主机暴露 8080 端口,这样外部网络可以访问你的应用 EXPOSE 8080 # 告诉 Docker 启动容器运行的命令 CMD ["go-wrapper", "run"]
构建/运行容器
使用下面的命令构建你的 Go web-app,你会在成功构建后获得确认。
root@demohost:~/web-app# docker build --rm -t web-app . Sending build context to Docker daemon 3.584 kB Step 1 : FROM golang:latest latest: Pulling from library/golang 386a066cd84a: Already exists 75ea84187083: Pull complete 88b459c9f665: Pull complete a31e17eb9485: Pull complete 1b272d7ab8a4: Pull complete eca636a985c1: Pull complete 08158782d330: Pull complete Digest: sha256:02718aef869a8b00d4a36883c82782b47fc01e774d0ac1afd434934d8ccfee8c Status: Downloaded newer image for golang:latest ---> 9752d71739d2 Step 2 : RUN mkdir -p /go/src/web-app ---> Running in 9aef92fff9e8 ---> 49936ff4f50c Removing intermediate container 9aef92fff9e8 Step 3 : WORKDIR /go/src/web-app ---> Running in 58440a93534c ---> 0703574296dd Removing intermediate container 58440a93534c Step 4 : COPY . /go/src/web-app ---> 82be55bc8e9f Removing intermediate container cae309ac7757 Step 5 : RUN go-wrapper download ---> Running in 6168e4e96ab1 + exec go get -v -d ---> 59664b190fee Removing intermediate container 6168e4e96ab1 Step 6 : RUN go-wrapper install ---> Running in e56f093b6f03 + exec go install -v web-app ---> 584cd410fdcd Removing intermediate container e56f093b6f03 Step 7 : ENV PORT 8080 ---> Running in 298e2a415819 ---> c87fd2b43977 Removing intermediate container 298e2a415819 Step 8 : EXPOSE 8080 ---> Running in 4f639a3790a7 ---> 291167229d6f Removing intermediate container 4f639a3790a7 Step 9 : CMD go-wrapper run ---> Running in 6cb6bc28e406 ---> b32ca91bdfe0 Removing intermediate container 6cb6bc28e406 Successfully built b32ca91bdfe0
现在可以运行我们的 web-app 了,可以执行下面的命令。
root@demohost:~/web-app# docker run -p 8080:8080 --name="test" -d web-app 7644606b9af28a3ef1befd926f216f3058f500ffad44522c1d4756c576cfa85b
进入 http://localhost:8080/World 浏览你的 web 应用。你已经成功容器化了一个可重复的/确定性的 Go web 应用。使用下面的命令来启动、停止并检查容器的状态。
### 列出所有容器 root@demohost:~/ docker ps -a ### 使用 id 启动容器 root@demohost:~/ docker start CONTAINER_ID_OF_WEB_APP ### 使用 id 停止容器 root@demohost:~/ docker stop CONTAINER_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.tiny Dockerfile # 得到最新的 golang docker 镜像 FROM golang:latest # 在容器内部创建一个目录来存储我们的 web 应用,接着使它称为工作目录。 RUN mkdir -p /go/src/web-app WORKDIR /go/src/web-app # 复制 web 程序到容器中 COPY . /go/src/web-app # 下载并安装第三方依赖到容器中 RUN go get github.com/codegangsta/gin RUN go-wrapper download RUN go-wrapper install # 设置 PORT 环境变量 ENV PORT 8080 # 给主机暴露 8080 端口,这样外部网络可以访问你的应用 EXPOSE 3030 # 启动容器时运行 Gin CMD gin run # 告诉 Docker 启动容器运行的命令 CMD ["go-wrapper", "run"]
现在构建镜像并启动容器:
root@demohost:~/web-app# docker build --rm -t web-app .
我们会在当前 web 程序的根目录下运行 docker,并通过暴露的 3030 端口链接 CWD (当前工作目录)到容器中的应用目录下。
复制代码 代码如下:
root@demohost:~/web-app# docker run -p 3030:3030 -v `pwd`:/go/src/web-app --name="test" -d web-app
打开 http://localhost:3030/World, 你就能看到你的 web 程序了。现在如果你改变了任何代码,会在浏览器刷新后反映在你的浏览器中。
总结
就是这样,我们的 Go web 应用已经运行在 Ubuntu 16.04 Docker 容器中运行了!你可以通过使用 Go 框架来快速开发 API、网络应用和后端服务,从而扩展当前的网络应用。
# go
# docker
# 部署
# docker部署go
# web实战
# linux下使用Docker和OSS轻松搭建ownCloud专属网盘(网盘关闭不用怕)
# 在docker中部署tomcat并且部署java应用程序的步骤详解
# 在Docker上开始部署Python应用的教程
# 在Docker快速部署Node.js应用的详细步骤
# Ubuntu Docker 的安装部署及简单应用
# 使用Docker部署 spring-boot maven应用的方法
# 使用Docker部署Spring Boot的应用示例
# Docker实践--部署Nodejs应用
# .Net Core自动化部署之利用docker版jenkins部署dotnetcore应用的方法
# Docker Cloud实现部署应用操作详解
# 镜像
# 会在
# 创建一个
# 器中
# 使它
# 并在
# 你已经
# 第三方
# 进行了
# 应用程序
# 是一个
# 这是
# 下载并安装
# 容器内
# 如果你
# 你可以
# 是有
# 你就
# 都要
# 将其
相关文章:
seo网站制作优化,网站SEO优化步骤有哪些?
如何将凡科建站内容保存为本地文件?
如何在IIS服务器上快速部署高效网站?
建站之星备案流程有哪些注意事项?
建站之星后台搭建步骤解析:模板选择与产品管理实操指南
微网站制作教程,不会写代码,不会编程,怎么样建自己的网站?
专业网站制作服务公司,有哪些网站可以免费发布招聘信息?
北京专业网站制作设计师招聘,北京白云观官方网站?
如何选择CMS系统实现快速建站与SEO优化?
建站之星安全性能如何?防护体系能否抵御黑客入侵?
成都网站制作报价公司,成都工业用气开户费用?
建站之星logo尺寸如何设置最合适?
高端智能建站公司优选:品牌定制与SEO优化一站式服务
建站VPS推荐:2025年高性能服务器配置指南
如何解决VPS建站LNMP环境配置常见问题?
南京网站制作费用,南京远驱官方网站?
如何选择最佳自助建站系统?快速指南解析优劣
如何零基础在云服务器搭建WordPress站点?
常州自助建站工具推荐:低成本搭建与模板选择技巧
建站与域名管理如何高效结合?
如何快速配置高效服务器建站软件?
官网自助建站系统:SEO优化+多语言支持,快速搭建专业网站
网站制作免费,什么网站能看正片电影?
云南网站制作公司有哪些,云南最好的招聘网站是哪个?
品牌网站制作公司有哪些,买正品品牌一般去哪个网站买?
广东专业制作网站有哪些,广东省能源集团有限公司官网?
制作企业网站建设方案,怎样建设一个公司网站?
专业商城网站制作公司有哪些,pi商城官网是哪个?
如何通过主机屋免费建站教程十分钟搭建网站?
,sp开头的版面叫什么?
大型企业网站制作流程,做网站需要注册公司吗?
如何破解联通资金短缺导致的基站建设难题?
网站制作公司哪里好做,成都网站制作公司哪家做得比较好,更正规?
微信网站制作公司有哪些,民生银行办理公司开户怎么在微信网页上查询进度?
网站制作费用多少钱,一个网站的运营,需要哪些费用?
如何通过智能用户系统一键生成高效建站方案?
微信小程序 五星评分(包括半颗星评分)实例代码
javascript基本数据类型及类型检测常用方法小结
武汉网站如何制作,黄黄高铁武穴北站途经哪些村庄?
网站制作网站,深圳做网站哪家比较好?
建站之星展会模板:智能建站与自助搭建高效解决方案
如何用腾讯建站主机快速创建免费网站?
建站之星如何助力企业快速打造五合一网站?
湖州网站制作公司有哪些,浙江中蓝新能源公司官网?
制作销售网站教学视频,销售网站有哪些?
如何制作新型网站程序文件,新型止水鱼鳞网要拆除吗?
我的世界制作壁纸网站下载,手机怎么换我的世界壁纸?
陕西网站制作公司有哪些,陕西凌云电器有限公司官网?
C#如何序列化对象为XML XmlSerializer用法
建站之家VIP精选网站模板与SEO优化教程整合指南
*请认真填写需求信息,我们会在24小时内与您取得联系。