javagolanggolangjavagolang
package main

import "github.com/gin-gonic/gin"

func setupRouter() *gin.Engine {
    return gin.Default()
}

func main() {
    r := setupRouter()
    r.Run(":8000")
}

编译一下

CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o main

编写Dockerfile

FROM golang:1.12-alpine
ADD main /
CMD ["/main"]

制作镜像

docker build -t registry.cn-shanghai.aliyuncs.com/testops/hw-go:latest .

so easy

java
package com.example.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class DemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }

}

打包

mvn clean package

同样的编写Dockerfile

FROM openjdk:8-jdk-alpine
ADD /target/demo-0.0.1-SNAPSHOT.jar app.jar
CMD ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

打镜像

docker build -t registry.cn-shanghai.aliyuncs.com/testops/hw-java:latest .

先来对比一下镜像

image.png

可以看出:
golang:1.12-alpine
的镜像尺寸要比
openjdk:8-jdk-alpine
大不少,这也导致最后制作出来的
镜像
hw-go
要比
hw-java
大上不少。
hw-go
image.png
image.png
hw-java
image.png

image.png

内存占用
4.328MiB
VS
264.2MiB
,66倍的差距,这一轮(当然是在我的实验条件下),
java
是完败的,我没想到这个对比来的这么强烈,有一点点夸张,但至少可以看出
springboot
是比较吃内存的(啥也没干,只是起了一个http server而已),这样看来,如果用
golang
来重写
java
服务,相信内存占用会少很多,届时减少机器也并非不可能,不过想到在某些
springboot
服务启动时看到
佛祖保佑,**项目,永无BUG
的字样,就觉得此事任重而道远……