使用Docker部署Go应用程序的流程

1、go.mod 编写源码

首先编写Go程序代码,并使用go.mod进行依赖管理。
Go示例代码:

package main

import (
	"fmt"
	"log"
	"net/http"
)

func myHandler(w http.ResponseWriter, r *http.Request) {
	fmt.Fprintf(w, "Hello world\n")
}

func main() {
	http.HandleFunc("/", myHandler)
	log.Fatal(http.ListenAndServe(":8090", nil))
}

go.mod示例内容:

module test

go 1.13

2、Dockerfile 编写部署文件

编写打包部署所需要的Dockerfile文件。示例如下:

#因为golang镜像有点大,此处使用了大小体积只有5MB的alpine镜像
FROM alpine:latest

#维护者信息(非必须)
MAINTAINER xxx "yyy@zzz.com"

#设置当前工作路径
WORKDIR /

#把上文编译好的可执行文件添加到镜像里
ADD main /

#暴露容器内部端口
EXPOSE 8090

#可执行程序入口
ENTRYPOINT ["./main"]

3、docker build 构建镜像

先根据镜像实际运行平台(alpine)进行源码编译:

env GOOS=linux GOARCH=386 go build main.go

再打包编译结果:

docker build -t main:v1 .

4、docker run 运行镜像

docker run --name docker-main -d -p 8090:8090 main:v1