diff --git a/tools/goctl/docker/docker.go b/tools/goctl/docker/docker.go index 6461fbac..d8292509 100644 --- a/tools/goctl/docker/docker.go +++ b/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(), diff --git a/tools/goctl/docker/template.go b/tools/goctl/docker/template.go index afe5322c..6d21d3c6 100644 --- a/tools/goctl/docker/template.go +++ b/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}} diff --git a/tools/goctl/goctl.go b/tools/goctl/goctl.go index 0622dd2a..f472b37d 100644 --- a/tools/goctl/goctl.go +++ b/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",