最近开发了一个小程序,到了部署阶段,学习了部署的步骤,总结如下:
- 下载基础镜像
golang编译使用的基础镜像有以下三种:
1.golang:onbuild
构建简单,包含编译是的所有运行环境,但体积较大
Dockerfile配置如下:
FROM golang:onbuild
EXPOSE 8080
2.golang:alpine
构建复杂, 需执行编译动作,体积小
Dockerfile配置如下:
FROM golang:alpine
WORKDIR /app
ADD . /app
RUN cd /app && go build -o goapp
EXPOSE 8080
ENTRYPOINT ./goapp
3.golang:alpine AS build-env
构建复杂,体积更小,携带工具少,安全性更高(推荐)
Dockerfile配置如下:
FROM golang:alpine AS build-env
WORKDIR /app
ADD . /app
RUN cd /app && go build -o goapp
FROM alpine
RUN apk update && \
apk add ca-certificates && \
update-ca-certificates && \
rm -rf /var/cache/apk/*
WORKDIR /app
COPY --from=build-env /app/goapp /app
EXPOSE 8080
ENTRYPOINT ./goapp
- 对基础镜像打tag,上传至私有镜像仓库(方便后面编译的时候直接调用私有镜像仓库镜像)
docker dag imageID 私有镜像地址/golang:onbuild --为镜像打tag
docker login 私有镜像地址 --登录私有镜像,此处有两点需要注意,
一是要在daemon.json文件中添加insecure-registries,注意格式要正确,然后重启docker,如果启动报错,请检查/etc/systemconfig/docker(参考https://www.cnblogs.com/John5/p/docker.html);
{
"insecure-registries":["私有镜像地址"]
}
二是网络连接超时,我在hosts添加了域名解析后OK;
登陆成功后执行push语句,将镜像上传到镜像仓库
docker push 私有镜像地址/golang:onbuild
- 修改Dockerfile
进入golang开发的项目文件根目录,找到Dockerfile,修改参照如下
FROM 私有镜像地址/golang:onbuild
MAINTAINER 维护者名字
EXPOSE 3333
- 执行编译
这里我将项目文件所在目录挂载到docker虚机上,切换到项目文件根目录,执行docker build -f Dockerfile . (记录,最后这个点千万别忘了,这代表当前目录),然后执行docker images,你看到已经生成新的镜像文件,拿着这个镜像文件去部署就OK了。