多阶段构建Golang程序Docker镜像 (2)

scratch是一个空镜像,只能用于构建其他镜像,比如你要运行一个包含所有依赖的二进制文件,如Golang程序,可以直接使用scratch作为基础镜像。scratch本身是不占空间的,所以使用它构建的镜像大小几乎和二进制文件本身一样大,从而让Golang应用的Docker镜像体积非常小。
参考:https://mp.weixin.qq.com/s/S1Ib08SpQbf1SCbCutUoqQ

制作Golang程序Docker镜像

这里直接使用Linux服务器制作Docker镜像,也可以使用Docker for windows在windows上制作Docker镜像。

前提:Linux服务器安装Docker,Golang

(1)拉取项目
go get -x github.com/bingjian-zhu/gin-vue-admin/cmd

(2)修改配置文件
进入项目中config/config.yml,修改database配置,改成自己的MySQL数据库。run-mode运行模式改成release。

多阶段构建Golang程序Docker镜像

(3)生成Docker镜像

镜像名字为zhubingjian/gin-vue-admin,版本1.0,不要漏了最后面的.;

docker build -t zhubingjian/gin-vue-admin:1.0 .

其中zhubingjian是我Docker Hub的账号,想要把镜像上传到自己的Docker Hub上,镜像名称需要以Docker Hub账号+/开头。已经生成的镜像可以通过tag修改名称。

运行指令:docker images

可以看到我们生成的Docker镜像只有14.3M,非常小。名称为none的镜像是多阶段生成过程留下的镜像,可以使用docker rmi 镜像ID把它删除掉。

多阶段构建Golang程序Docker镜像

(4)运行镜像

docker run -d --name gin-vue-admin -p 8000:8000 zhubingjian/gin-vue-admin:1.0

-d:容器以守护进程的方式运行

--name:容器的名字,可以不指定名字

-p:指定宿主机器与容器的端口对应关系, 格式为“宿主端口:容器端口”,如果不指定此项,将无法访问容器里的服务

运行指令:docker ps -a

可以看到所有容器,STATUS显示Up 10 seconds,表示两个意思:一是容器在运行;二是已经运行了10秒。如果显示Exited 6 days,则表示已经停止运行6天了。

多阶段构建Golang程序Docker镜像

目前为止,我们已经成功制作Docker镜像且运行了。接下来把前端的VUE项目也做成Docker镜像并运行。

制作VUE程序Docker镜像

前提:服务器安装Docker,nodejs,npm

(1)进入vue-admin目录,下载npm包

npm install

(2)修改vue-admin目录下的.env.production文件,改成自己的后台接口地址

多阶段构建Golang程序Docker镜像

(3)发布项目,生成dist文件夹
npm run build:prod

(4)生成Docker镜像
docker build -t zhubingjian/vue-admin:1.0 .

(5)运行镜像
docker run -p 80:80 -d --name vue-admin zhubingjian/vue-admin:1.0

参考:Docker 部署 vue 项目

最后,在浏览器上打开:

就可以看到程序已经在服务器上跑了。

把镜像推送到Docker Hub上

首先需要注册Docker Hub账号,我注册时候是有坑的,注册系统需要做人机检测,需要翻墙才能完成。官网地址:https://hub.docker.com/

(1)登录Docker Hub
docker login

然后输入用户名和密码

多阶段构建Golang程序Docker镜像

(2)推送镜像

docker push zhubingjian/gin-vue-admin:1.0 docker push zhubingjian/vue-admin:1.0 总结

本篇主要介绍如何使用多阶段构建Golang程序的Docker镜像,此方法可以精简Docker镜像。

源码地址:https://github.com/Bingjian-Zhu/gin-vue-admin

参考:

https://blog.csdn.net/weixin_42852772/article/details/82013418

https://www.jianshu.com/p/4b345a9e768e

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zzjxwd.html