Docker中go web项目部署

Dockerfile

#部署golang环境
FROM golang:1.9
#下载gin包
RUN go get github.com/gin-gonic/gin
#开放端口
EXPOSE 7070

在Dockerfile目录打开一个终端,运行

sudo docker build -t my-gin .

之后待到镜像构建完毕之后通过

sudo docker images

可以查看到tag为latest的my-gin镜像

REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
my-gin              latest              689590bc3953        28 minutes ago      756MB

这是因为我们用docker build命令的时候没有指定my-gin的tag,所以默认是latest,你也可以这样使用:

sudo docker build -t my-gin:test .

这样会得构建一个tag为test的my-gin镜像

启动容器

现在已经拥有一个tag为my-gin的镜像,我们需要利用这个镜像启动一个容器

docker run -it --rm --name gin-instance -p 7070:7070 -v /home/youngblood/Go/src/ginDocker:/go/src/ginDocker -w /go/src/ginDocker my-gin

说明

  • docker run 用于从一个image上启动一个容器
  • -it 标签以交互的方式启动容器
  • --rm 标签在容器关闭后会会删除该容器,查看容器命令:sudo docker ps -a
  • -p 7070:7070标签允许荣过主机的7070端口访问docker容器中的7070端口
  • -v /home/youngblood/Go/src/ginDocker:/go/src/ginDocker表示将docker容器中的/go/src/ginDocker目录挂在到物理机的/home/youngblood/Go/src/ginDocker目录中,/home/youngblood/Go是我物理机的GOPATH,你也可以选择不用这个目录
  • -w /go/src/ginDocker表示打开容器中的工作目录
  • my-gin则是表示该容器使用的镜像文件

启动成功之后便会进入容器的/go/src/ginDocker目录,如下

root@774e60551b73:/go/src/ginDocker# 

现在我们在物理机上编写ginDocker的一些功能,新建一个main.go,写入如下代码

package main

import (
    "net/http"
    "github.com/gin-gonic/gin"
)

func main() {

    router := gin.Default()

    router.GET("/hello/:name", func(c *gin.Context) {
        name := c.Param("name")
        c.String(http.StatusOK, "hello %s", name)
    })
    router.Run(":7070")
}

在容器中执行如下命令

root@774e60551b73:/go/src/ginDocker# go build ginDocker
root@774e60551b73:/go/src/ginDocker# ./ginDocker

出现如下结果

root@774e60551b73:/go/src/ginDocker# go build ginDocker
root@774e60551b73:/go/src/ginDocker# ./ginDocker 
[GIN-debug] [WARNING] Creating an Engine instance with the Logger and Recovery middleware already attached.

[GIN-debug] [WARNING] Running in "debug" mode. Switch to "release" mode in production.
 - using env:   export GIN_MODE=release
 - using code:  gin.SetMode(gin.ReleaseMode)

[GIN-debug] GET    /hello/:name              --> main.main.func1 (3 handlers)
[GIN-debug] Listening and serving HTTP on :7070

现在在物理机上的浏览器访问localhost:7070/hello/初级赛亚人

访问ginDocker截图

这样我们就完成了一个go web项目的部署

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Docker — 云时代的程序分发方式 要说最近一年云计算业界有什么大事件?Google Compute Engi...
    ahohoho阅读 15,702评论 15 147
  • 五、Docker 端口映射 无论如何,这些 ip 是基于本地系统的并且容器的端口非本地主机是访问不到的。此外,除了...
    R_X阅读 5,797评论 0 7
  • 转载自 http://blog.opskumu.com/docker.html 一、Docker 简介 Docke...
    极客圈阅读 13,583评论 0 120
  • 前几天,在图书馆借到了一本由韩寒主编的书《我们从未陌生过》。 其中有个故事讲的是逆流者,所谓逆流者,就是所有人都顺...
    六厘米阅读 2,286评论 2 0
  • 你在哪座城市?过着怎样的生活?留下怎样的故事? 终究是因为一座城市习惯了一种生活,还是因为习惯了一...
    斌心依旧阅读 2,498评论 0 0