1. go目录结构
# 项目目录信息
$ tree go-container
go-container
├── Dockerfile
├── go.mod
├── go.sum
└── main.go
# 项目目录信息
$ tree go-container
go-container
├── Dockerfile
├── go.mod
├── go.sum
└── main.go
main.go
go
package main
import (
"github.com/gin-gonic/gin"
"os"
"time"
)
func main() {
engine := gin.Default()
engine.GET("/", func(context *gin.Context) {
// 显示主机名字
hostName, _ := os.Hostname()
context.JSON(200, gin.H{
"version": "v1",
"hostName": hostName,
"time": time.Now().Format("2006-01-02 15:04:05"),
})
})
_ = engine.Run(":80")
}
package main
import (
"github.com/gin-gonic/gin"
"os"
"time"
)
func main() {
engine := gin.Default()
engine.GET("/", func(context *gin.Context) {
// 显示主机名字
hostName, _ := os.Hostname()
context.JSON(200, gin.H{
"version": "v1",
"hostName": hostName,
"time": time.Now().Format("2006-01-02 15:04:05"),
})
})
_ = engine.Run(":80")
}
2. 制作镜像
Dockerfile
yaml
# Golang版本;Alpine镜像的体积较小。
FROM golang:1.18 as builder
# 将代码复制到构建镜像中。
ADD . /workspace
WORKDIR /workspace
# 挂载构建缓存。
# GOPROXY防止下载失败。
RUN --mount=type=cache,target=/go \
env GOPROXY=https://goproxy.cn,direct \
go build -buildmode=pie -ldflags "-linkmode external -extldflags -static -w" \
-o /workspace/gin-hello
# 运行时镜像。
# Alpine兼顾了镜像大小和运维性。
FROM alpine:3.14
EXPOSE 8080
# 复制构建产物。
COPY --from=builder /workspace/gin-hello /app/
# 指定默认的启动命令。
CMD ["/app/gin-hello"]
# Golang版本;Alpine镜像的体积较小。
FROM golang:1.18 as builder
# 将代码复制到构建镜像中。
ADD . /workspace
WORKDIR /workspace
# 挂载构建缓存。
# GOPROXY防止下载失败。
RUN --mount=type=cache,target=/go \
env GOPROXY=https://goproxy.cn,direct \
go build -buildmode=pie -ldflags "-linkmode external -extldflags -static -w" \
-o /workspace/gin-hello
# 运行时镜像。
# Alpine兼顾了镜像大小和运维性。
FROM alpine:3.14
EXPOSE 8080
# 复制构建产物。
COPY --from=builder /workspace/gin-hello /app/
# 指定默认的启动命令。
CMD ["/app/gin-hello"]
2.1 构建镜像
docker build -t test/gin-hello:v1 .
docker build -t test/gin-hello:v1 .