美文网首页
docker学习笔记(2)-如何部署go到docker

docker学习笔记(2)-如何部署go到docker

作者: AlexLee2019 | 来源:发表于2019-02-12 17:23 被阅读0次

    docker学习笔记(2)-如何部署go到docker

    1.编写go程序

    这里的demo,我写的是一个Restful Api,没有进行封装,只写了一个go文件

    package main
     
    import (
        "github.com/gorilla/mux"
        "net/http"
        "fmt"
        "log"
        "time"
        "os"
    )
     
    func main() {
        t1 := time.Now()
        file, err := os.Create("test.log")
        if err != nil {
            log.Fatalln("fail to create test.log file")
        }
        logger := log.New(file, "", log.Llongfile)
        logger.SetFlags(log.LstdFlags)
        router := mux.NewRouter().StrictSlash(true)
        router.HandleFunc("/", Index)
        router.HandleFunc("/version", Version)
        router.HandleFunc("/date", Date)
        t2 := time.Since(t1)
        fmt.Println("Startup time by : ", t2)
        logger.Println("Startup time by : ", t2)
        logger.Fatal(http.ListenAndServe(":8080", router))
    }
    func Date(writer http.ResponseWriter, request *http.Request) {
        fmt.Fprintln(writer, time.Now().Local().Format("2006-01-02"))
    }
    func Version(writer http.ResponseWriter, request *http.Request) {
        fmt.Fprintln(writer, "1.0.0")
    }
    func Index(writer http.ResponseWriter, request *http.Request) {
        fmt.Fprintln(writer, "Hello!")
    }
    

    下载相关包到本地,这里只有 github.com/gorilla/mux 需要下载

    • 需要设置好GOPATH环境变量并已安装好git,否则不生效

      go get github.com/gorilla/mux

    如果没有go的编译环境,可以下载docker的go镜像来进行编译,这里使用最新版本,可以根据自己的go程序需要下载对应版本

    docker pull golang

    • 接下来利用golang的镜像编译go代码
    docker run --rm -it -v "$GOPATH":/gopath -v "$(pwd)":/app -e "GOPATH=/gopath" -w /app golang:latest sh -c 'CGO_ENABLED=0 go build --ldflags="-s" -o your_app_bin_name'
    

    顺利的话可执行程序已经生成了,不顺利就找找原因吧^_^!

    go程序已经就顺利写好,接下来就是生成镜像了。

    2.生成镜像

    这里我采用了Dockerfile生成镜像,其他生成方式不做概述

    • 编写Dockerfile
    FROM iron/base
     
    WORKDIR /app
     
    COPY rest_api_test /app/
     
    ENTRYPOINT ["./rest_api_test"]
    

    Dockerfile编写完就可以来生成镜像了,命令比较简单

    docker build -t restapitest:1.0.0 .

    这时通过docker images可以看到镜像已经生成了,在容器中运行一下试试

    docker run -it --rm -p 80:8080 -d restapitest:1.0.0

    此时访问本机地址的restfulApi接口就可以看到以下结果

    curl http://127.0.0.1/version

    1.0.0

    curl http://127.0.0.1/date

    2019-2-12

    镜像已顺利制作成功^_^!

    3.上传镜像到 hub.docker.com

    镜像成功生成,我们可以利用docker ps 看到刚刚运行在容器中的究镜像

    想要上传需要在hub.docker.coms上注册账号并建立自己的仓库哦。

    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                  NAMES
    2ca8f61a3e0f        restapitest:1.0.0   "./rest_api_test"   3 seconds ago       Up 2 seconds        0.0.0.0:80->8080/tcp   angry_haibt
    

    利用docker commit 生成准备上传的latest版本(需要版本号可指定)

    docker commit 2ca8f61a3e0f 用户名/仓库名

    此时镜像的latest版本已经生成,可以通过docker images查看生成的镜像名称和版本,准备上传。

    上传之前需要登录刚刚注册的账号使用docker login登录即可

    开始上传

    docker pull 镜像名称:版本

    当当当当!成功啦(如果pull超时失败多尝试几次就好啦)。

    相关文章

      网友评论

          本文标题:docker学习笔记(2)-如何部署go到docker

          本文链接:https://www.haomeiwen.com/subject/lsbkeqtx.html