GO-Gin-Example 第六部分 将Golang应用部署到Docker
# 使用官方 Golang 镜像作为基础镜像
FROM golang:1.16-alpine AS builder
# 设置环境变量
ENV GO111MODULE=on \
CGO_ENABLED=0 \
GOOS=linux \
GOARCH=amd64
# 创建并设置工作目录
WORKDIR /build
# 复制 go.mod 和 go.sum 文件,并下载依赖
COPY go.mod go.sum ./
RUN go mod download
# 复制项目源码到工作目录
COPY . .
# 编译构建应用程序
RUN go build -o /build/bin/golang-example ./cmd/golang-example
# 使用官方 Nginx 镜像作为基础来运行应用
FROM nginx:alpine
# 从构建阶段复制编译好的二进制文件到 Nginx 服务器
COPY --from=builder /build/bin/golang-example /usr/share/nginx/html/golang-example
# 将 Nginx 配置文件复制到 Nginx 服务器
COPY nginx.conf /etc/nginx/nginx.conf
# 暴露 80 端口供外部访问
EXPOSE 80
# 启动 Nginx,并且当容器启动时自动运行
CMD ["nginx", "-g", "daemon off;"]
这个Dockerfile使用了多阶段构建,首先使用Go的官方镜像来编译Go应用程序,然后使用Nginx镜像来运行编译好的应用。这样做的好处是可以将编译和运行时环境分开,减小了最终生成的Docker镜像的大小。同时,它设置了合适的环境变量和参数来保证应用程序的正确编译和运行。最后,它将Nginx的配置文件复制进去,并且暴露了80端口。
评论已关闭