1.在main.go 文件中编写代码,这里我先用一段使用​​net/http​​库编写的简单代码为例讲解如何使用Docker进行部署,后面再讲解稍微复杂一点的项目部署案例。

package main

import (
"fmt"
"net/http"
)

func main() {
http.HandleFunc("/", hello)
server := &http.Server{
Addr: ":8888",
}
fmt.Println("server startup...")
if err := server.ListenAndServe(); err != nil {
fmt.Printf("server startup failed, err:%v\n", err)
}
}

func hello(w http.ResponseWriter, _ *http.Request) {
w.Write([]byte("hello liwenzhou.com!"))
}

  上面的代码通过​​8888​​​端口对外提供服务,返回一个字符串响应:​​hello liwenzhou.com!​

 

创建Docker镜像

 

镜像(image)包含运行应用程序所需的所有东西——代码或二进制文件、运行时、依赖项以及所需的任何其他文件系统对象。

或者简单地说,镜像(image)是定义应用程序及其运行所需的一切。

编写Dockerfile

要创建Docker镜像(image)必须在配置文件中指定步骤。这个文件默认我们通常称之为​​Dockerfile​​​。(虽然这个文件名可以随意命名它,但最好还是使用默认的​​Dockerfile​​。)

现在我们开始编写​​Dockerfile​​,具体内容如下:

FROM golang:alpine

# 为我们的镜像设置必要的环境变量 ,(轻型操作系统)容器的环境变量
ENV GO111MODULE=on \
CGO_ENABLED=0 \
GOOS=linux \
GOARCH=amd64

# 移动到工作目录:/build 类似于cd 命令切换到指定目录,容器启动后此目录下面会有切换到这个目录后,复制过来的文件
WORKDIR /build

# 将代码复制到容器中
COPY . .

# 将我们的代码编译成二进制可执行文件app
RUN go build -o app .

# 移动到用于存放生成的二进制文件的 /dist 目录
WORKDIR /dist

# 将二进制文件从 /build 目录复制到这里
RUN cp /build/app .

# 声明服务端口
EXPOSE 8888

# 启动容器时运行的命令
CMD ["/dist/app"]

  

构建镜像

docker build . -t goweb_app

 

运行镜像

docker run -p 8888:8888 goweb_app