编写Dockerfile,实现go程序的编译和运行.
简述
docker是目前微服务部署场景中,非常重要的工具,目前大部分的公司都是使用docker+k8s实现集群化的部署。docker是Go语言编写的,那么今天简单的说明一下Go语言编译与运行的实战,使用多阶段
实例
使用多阶段构建的docker镜像的实例,实践,测试可用,应该可以直接用。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
| # 使用golang:1.15.6-alpine3.12作为编译的基础镜像
FROM golang:1.15.6-alpine3.12 AS builder
# 相关的标签
LABEL version="golang:1.15.6-alpine3.12" \
description="make go meeting ctrl" \
author="Coolliuzw" \
stage=builder
# go环境变量配置
ENV CGO_ENABLED=0 \
GOOS=linux \
GOPROXY=https://goproxy.cn,direct \
GOARCH=amd64
ENV APP_NAME="main"
# 编译的工作目录
WORKDIR /build/go
## 使用aliyun的镜像加速服务.
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories
# go mod 的镜像下载,可以缓存
ADD go.mod .
ADD go.sum .
RUN go mod download
# 编译go程序
COPY . .
RUN go build -ldflags="-s -w" -o ${APP_NAME}
# 使用最小镜像运行
FROM alpine:3.12
## 使用aliyun的镜像加速服务.
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories
# 安装相关需要的工具包
RUN apk update \
&& apk add ca-certificates \
-U tzdata \
bash \
bash-doc \
bash-completion \
ca-certificates \
&& rm -rf /var/cache/apk/*
## 设置时区信息
RUN rm -rf /etc/localtime && ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
# 运行目录的构建
ENV APP_BUILD /build/go
ENV APP_NAME main
ENV APP_ROOT root/opt/${APP_NAME}
# RUN mkdir -p ${APP_ROOT}
#暴露端口
EXPOSE 8080
# 工作目录
WORKDIR ${APP_ROOT}
COPY --from=builder ${APP_BUILD}/${APP_NAME} ./bin/${APP_NAME}
CMD ./bin/${APP_NAME}
|
docker build -t coolliuzw:go .
清除未使用镜像
总结
实践测试,构建简单的http服务程序
coolliuzw go 7f9b79a9e681 7 minutes ago 19.7MB
测试成功