docker部署go环境和php环境,关于 Go 项目在docker环境中的部署问题

这个问题来自于 Colin 最近的一个新项目,这个项目的技术选型符合我心目中的完美项目

如果把 Vue 换成 React 看起来就更舒服了。

他们打算使用下面这种结构

76b00eec79be8d30d3d69c7395907acf.png

实际上这个模型又回到了之前我的实习生小盆友的学习项目中的问题,

Colin 他们也使用了 golang 镜像,和实习生一样,他们认为和java镜像一样,既然我使用golang,那么我需要一个golang运行环境

但是这里,golang 本身不是 动态语言或者混合语言(像java那样,既JIT又有class解释器),它实际上是一种现代 C 语言

既然Golang本身可以编译成 可执行二进制 文件,也就是说我可以理解它只需要依赖 Linux kernel 就可以了 ( 当然你也需要shell )

当然绝大多数情况只有 Kernel 是不够用的,但是这里仅就 helloworld 代码,理论上而言,Kernel 已经够用了

要理解这个问题,你需要考虑 docker 到底是什么的问题,再重申一遍,docker不是虚拟机

docker实际上是 “rootfs层 + 应用层 的一个包”

1cf1f84711ea1a5162d4644ada2010e6.png

那既然我只是一个 不依赖特殊运行时环境的,可执行二进制文件,那我干嘛还要那么臃肿的 rootfs 层

package main

import "fmt"

func main() {

fmt.Println("helloworld")

}

Dockerfile

FROM golang

WORKDIR /workfolder

COPY ./src .

RUN pwd

RUN ls

RUN go build -o your_app_name

FROM scratch

COPY --from=0 /workfolder/your_app_name /your_app_name

ENTRYPOINT [ "/your_app_name" ]

dbb771227d1a7734b5c7f1757ecfaac8.png

这样一个helloworld镜像就从 800多M 缩减到了 2M

不过scratch镜像可能确实太小了,具体需要安装那些依赖还要在实际环境中重新评估

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值