Skip to content

docker 部署

方式1:新手方式

bash
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build admin.go
  • dockerfile
yml
# scratch 是docker 的一个空镜像,内存非常小
FROM scratch
# 设置时区
ENV TZ Asia/Shanghai
# 设置工作区
WORKDIR /app
# 把包复制到容器
COPY admin /app/admin
# 把配置文件复制到容器
COPY ./etc /app/etc
# 暴漏端口
EXPOSE 6010
# 运行go程序
CMD ["./admin", "-f", "etc/admin-api.yaml"]
  • 运行容器
bash
# --network host 使用宿主机网络,可以访问自己的其他服务,如mysql,redis
docker run -itd --name admin  --network host admin:v1

方式2:一键打包

  1. dockerfile必须在项目跟目录下

  2. 参考dockerfile 文件名Dockerfile-Admin

yml
# 第一步:打包
# 设置go版本作为基础镜像,最好为自己项目的go版本号
FROM golang:1.22.0 as builder
# 维护者信息
LABEL author=zouyl
# 设置工作区
WORKDIR /build
# 下载管理依赖
ADD go.mod .
ADD go.sum .
RUN go mod download
# 把当前(宿主机上)目录下的文件都复制到docker上刚创建的目录下
COPY . .
# 复制配置文件到容器
COPY app/admin/core/etc /app/etc
# 配置打包参数
# 设置代理
ENV GOPROXY https://goproxy.cn,direct
# 禁用cgo
ENV CGO_ENABLED 0
# 设置服务器环境
ENV GOOS linux
# 设置打包架构amd64/arm64
ENV GOARCH amd64
# 进行打包
RUN go build -ldflags="-s -w" -o /app/admin app/admin/core/admin.go

# 第二步:运行镜像
# docker有一个基本镜像叫做scratch,它是一个空的镜像,在临时基础镜像上运行的应用程序只能访问内核
FROM scratch
# 配置镜像时区
ENV TZ Asia/Shanghai
# 配置工作目录
WORKDIR /app
# 复制包到容器
COPY --from=builder /app/admin /app/admin
# 复制配置文件到容器
COPY --from=builder /app/etc /app/etc
# 运行服务
CMD ["./admin", "-f", "etc/admin-api.yaml"]
  1. 执行打包、运行服务。
bash
# 由于可能有多个包,采用指定dockerfile方式
docker build -t admin:v2 -f Dockerfile-Admin .