فهرست منبع

feat: support scratch as the base docker image (#1634)

Kevin Wan 3 سال پیش
والد
کامیت
26a33932cd
3فایلهای تغییر یافته به همراه12 افزوده شده و 5 حذف شده
  1. 6 3
      tools/goctl/docker/docker.go
  2. 2 2
      tools/goctl/docker/template.go
  3. 4 0
      tools/goctl/goctl.go

+ 6 - 3
tools/goctl/docker/docker.go

@@ -28,6 +28,7 @@ type Docker struct {
 	GoRelPath   string
 	GoFile      string
 	ExeFile     string
+	Scratch     bool
 	HasPort     bool
 	Port        int
 	Argument    string
@@ -73,9 +74,10 @@ func DockerCommand(c *cli.Context) (err error) {
 		return fmt.Errorf("file %q not found", goFile)
 	}
 
+	scratch := c.Bool("scratch")
 	port := c.Int("port")
 	if _, err := os.Stat(etcDir); os.IsNotExist(err) {
-		return generateDockerfile(goFile, port, version, timezone)
+		return generateDockerfile(goFile, scratch, port, version, timezone)
 	}
 
 	cfg, err := findConfig(goFile, etcDir)
@@ -83,7 +85,7 @@ func DockerCommand(c *cli.Context) (err error) {
 		return err
 	}
 
-	if err := generateDockerfile(goFile, port, version, timezone, "-f", "etc/"+cfg); err != nil {
+	if err := generateDockerfile(goFile, scratch, port, version, timezone, "-f", "etc/"+cfg); err != nil {
 		return err
 	}
 
@@ -124,7 +126,7 @@ func findConfig(file, dir string) (string, error) {
 	return files[0], nil
 }
 
-func generateDockerfile(goFile string, port int, version, timezone string, args ...string) error {
+func generateDockerfile(goFile string, scratch bool, port int, version, timezone string, args ...string) error {
 	projPath, err := getFilePath(filepath.Dir(goFile))
 	if err != nil {
 		return err
@@ -157,6 +159,7 @@ func generateDockerfile(goFile string, port int, version, timezone string, args
 		GoRelPath:   projPath,
 		GoFile:      goFile,
 		ExeFile:     pathx.FileNameWithoutExt(filepath.Base(goFile)),
+		Scratch:     scratch,
 		HasPort:     port > 0,
 		Port:        port,
 		Argument:    builder.String(),

+ 2 - 2
tools/goctl/docker/template.go

@@ -28,9 +28,9 @@ COPY . .
 {{end}}RUN go build -ldflags="-s -w" -o /app/{{.ExeFile}} {{.GoRelPath}}/{{.GoFile}}
 
 
-FROM alpine
+FROM {{if .Scratch}}scratch{{else}}alpine{{end}}
 
-RUN apk update --no-cache && apk add --no-cache ca-certificates
+{{if .Scratch}}COPY --from=builder /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/ca-certificates.crt{{else}}RUN apk update --no-cache && apk add --no-cache ca-certificates{{end}}
 {{if .HasTimezone}}COPY --from=builder /usr/share/zoneinfo/{{.Timezone}} /usr/share/zoneinfo/{{.Timezone}}
 ENV TZ {{.Timezone}}
 {{end}}

+ 4 - 0
tools/goctl/goctl.go

@@ -341,6 +341,10 @@ var commands = []cli.Command{
 				Name:  "go",
 				Usage: "the file that contains main function",
 			},
+			cli.BoolFlag{
+				Name:  "scratch",
+				Usage: "use scratch for the base docker image",
+			},
 			cli.IntFlag{
 				Name:  "port",
 				Usage: "the port to expose, default none",