一只小开发仔...

Docker部署Gin(Golang)项目

88 2021-01-14 07:09:28

本文Docker部署Gin项目基于go-element-admin(https://go-vue.bigfool.cn)项目,该项目是基于vue2 + element ui + gin + gorm 构建的后台系统项目,感兴趣的可以去看看。

该方法使用了两个基础镜像(golang:alpine 和alpine)因为要使用cgo。

1.基于golang:alpine基础镜像构建出项目的可执行二进制文件。

FROM golang:alpine as builder

2.开启GO Module并设置GO Proxy代理

ENV GO111MODULE=on \
    GOPROXY=https://goproxy.cn,direct

3.新建工作目录并指定工作目录

RUN mkdir -p /go-element-admin

WORKDIR /go-element-admin

4.复制源代码到工作目录

COPY . .

5.设置操作系统, 操作系统构架 ,构建可执行文件

RUN GOOS=linux GOARCH=amd64

RUN go build -o server .

RUN chmod +x /go-element-admin/server

2.1基于alpine基础镜像构建运行环境

FROM alpine

2.2 设置相关信息

# MAINTAINER
LABEL name="go-element-admin"
LABEL version="1.0.1"
LABEL author="bigfool <1063944784@qq.com>"
LABEL maintainer="bigfool <1063944784@qq.com>"
LABEL description="go-element-admin application"

2.3 复制builder相关文件到基础镜像alpine

COPY --from=builder /go-element-admin/configs/config.yaml /go-element-admin/configs/config.yaml
COPY --from=builder /go-element-admin/server /go-element-admin

2.4 设置时区

RUN apk add -U tzdata \
    && cp /usr/share/zoneinfo/Asia/Shanghai /etc/lcoaltime \
    && echo 'Asia/Shanghai' > /etc/timezone

ENV TZ=Asia/Shanghai

2.5 新建一个用户www 并设置项目目录用户组

RUN adduser -D -H www \
    && chown -R www /go-element-admin

USER www

2.6 设置工作目录、端口和入口运行命令

WORKDIR /go-element-admin

EXPOSE 8001

ENTRYPOINT ["./server"]

构建镜像

docker build -t go-element-admin .

构建出来的镜像大小在41M左右

完整的Dockerfile

FROM golang:alpine as builder

# 开启Go Module, 设置GO Proxy代理
ENV GO111MODULE=on \
    GOPROXY=https://goproxy.cn,direct

# 新建项目目录
RUN mkdir -p /go-element-admin

# 指定工作目录
WORKDIR /go-element-admin

# 复制源代码到工作目录
COPY . .

# 删除旧的可执行文件
RUN rm -rf /go-element-admin/server

# 设置操作系统, 操作系统构架
RUN GOOS=linux GOARCH=amd64

RUN go build -o server .

# 添加可执行权限
RUN chmod +x /go-element-admin/server


FROM alpine

# MAINTAINER
LABEL name="go-element-admin"
LABEL version="1.0.1"
LABEL author="bigfool <1063944784@qq.com>"
LABEL maintainer="bigfool <1063944784@qq.com>"
LABEL description="go-element-admin application"

# 复制builder相关文件到基础镜像alpine
COPY --from=builder /go-element-admin/configs/config.yaml /go-element-admin/configs/config.yaml
COPY --from=builder /go-element-admin/server /go-element-admin

# 设置时区
RUN apk add -U tzdata \
    && cp /usr/share/zoneinfo/Asia/Shanghai /etc/lcoaltime \
    && echo 'Asia/Shanghai' > /etc/timezone

ENV TZ=Asia/Shanghai

# 创建日志目录
RUN mkdir -p /go-element-admin/logs

# 新建一个用户www 并设置项目目录用户组
RUN adduser -D -H www \
    && chown -R www /go-element-admin

# 执行用户
USER www

WORKDIR /go-element-admin

EXPOSE 8001

ENTRYPOINT ["./server"]