scratch是一个空镜像,只能用于构建其他镜像,比如你要运行一个包含所有依赖的二进制文件,如Golang程序,可以直接使用scratch作为基础镜像。scratch本身是不占空间的,所以使用它构建的镜像大小几乎和二进制文件本身一样大,从而让Golang应用的Docker镜像体积非常小。
参考:https://mp.weixin.qq.com/s/S1Ib08SpQbf1SCbCutUoqQ
这里直接使用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。
(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把它删除掉。
(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天了。
目前为止,我们已经成功制作Docker镜像且运行了。接下来把前端的VUE项目也做成Docker镜像并运行。
制作VUE程序Docker镜像前提:服务器安装Docker,nodejs,npm
(1)进入vue-admin目录,下载npm包
npm install
(2)修改vue-admin目录下的.env.production文件,改成自己的后台接口地址
(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
然后输入用户名和密码
(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