不管是开发还是生产环境,通过 docker 方式部署服务都是一种不错的选择,能够解决不同开发环境一致性的问题。
本文以项目:https://github.com/johncxf/go-api 为例。
Dockerfile 构建 Go 运用环境
在项目根目录下添加 Dockerfile 文件:
FROM golang:alpine
# 在容器内部设置环境变量
ENV GO111MODULE=on \
GOPROXY=https://goproxy.cn,direct \
CGO_ENABLED=0 \
GOOS=linux \
GOARCH=amd64
# 设置后续指令的工作目录
WORKDIR /build
# 将代码复制到容器中
COPY . .
# 下载依赖
RUN go mod download
# 将代码编译成二进制可执行文件
RUN go build -o go-api .
WORKDIR /dist
RUN cp /build/go-api .
COPY ./config ./config
# 需要运行的命令
ENTRYPOINT ["/dist/go-api", "/dist/config/env.yml"]
如果需要缩小镜像大小,则可以用以下方式进行构建
FROM golang:alpine AS builder
# 在容器内部设置环境变量
ENV GO111MODULE=on \
GOPROXY=https://goproxy.cn,direct \
CGO_ENABLED=0 \
GOOS=linux \
GOARCH=amd64
# 设置后续指令的工作目录
WORKDIR /build
# 复制项目中的 go.mod 和 go.sum文件并下载依赖信息
COPY go.mod .
COPY go.sum .
RUN go mod download
# 将代码复制到容器中
COPY . .
# 将代码编译成二进制可执行文件
RUN go build -o go-api .
# 创建一个小镜像
#FROM scratch
FROM debian:stretch-slim
COPY ./config /config
# 从builder镜像中把 /build/go-api 拷贝到当前目录
COPY --from=builder /build/go-api /
# 需要运行的命令
ENTRYPOINT ["/go-api", "config/env.yml"]
注:镜像scratch没有bash,会导致无法通过docker exec进入容器,建议直接改成debian:stretch-slim镜像
构建 docker 镜像 go-web-app:
$ docker build -t go-web-app .
# 查看镜像
$ docker images
启动容器来运行镜像:
$ docker run -p 8888:8088 go-web-app
# 后台启动
$ $ docker run -p 8888:8088

本文详细介绍了如何使用Dockerfile构建Go应用环境,包括设置环境变量、复制代码、下载依赖和构建镜像。还展示了如何使用Docker运行Mysql和Redis容器,并通过`docker-compose`实现服务间的链接和端口映射,以及如何修改配置以适应不同容器环境。

1962

被折叠的 条评论
为什么被折叠?



