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

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)