gpt4 book ai didi

docker - 在 docker 容器中构建比在根系统上构建要慢得多

转载 作者:行者123 更新时间:2023-12-01 22:15:40 25 4
gpt4 key购买 nike

我正在尝试使用以下命令构建一个 go 包:

CGO_ENABLED=0 GOOS=linux go build -o bin/router -installsuffix cgo -ldflags '-w'

这在我的电脑上大约需要 0.5 秒。 docker 容器中的相同命令需要 45 秒。

RUN CGO_ENABLED=0 GOOS=linux go build -o /app/router -installsuffix cgo -ldflags '-w' /build/src/global/router

本地我有 go 版本 1.12.9 linux/amd64。 docker 容器使用 golang:1.13 图像作为基础。

我的猜测是 docker 构建过程的可用 CPU 较少,但这有这么大的不同吗?导致此问题的原因可能是什么?

这可以用一个最小的例子重现:

main.go:

package main

import "log"

func main() {
log.Println("test")
}

Dockerfile:

FROM golang:1.13

ADD main.go .

RUN CGO_ENABLED=0 GOOS=linux go build -o main -installsuffix cgo -ldflags '-w'

CMD [ "main" ]

docker 容器内的命令大约需要 5 秒,而在我的电脑上需要 < 0.1 秒。

最佳答案

在我看来,问题不在于容器本身。

$ go clean
$ time GO_ENABLED=0 GOOS=linux go build -o main -installsuffix cgo -ldflags '-w'

real 0m0,233s
user 0m0,278s
sys 0m0,094s

$ time GO_ENABLED=0 GOOS=linux go build -o main -installsuffix cgo -ldflags '-w'

real 0m0,076s
user 0m0,098s
sys 0m0,053s

$ go clean
$ time GO_ENABLED=0 GOOS=linux go build -o main -installsuffix cgo -ldflags '-w'

real 0m0,238s
user 0m0,315s
sys 0m0,070s

您可以在比较连续构建中看到“清理”之后构建所花费的时间。

SYNOPSIS go clean [-i] [-r] [-n] [-x] [ packages ]

DESCRIPTION Clean

removes object files from package source directories. The go command builds most objects in a temporary directory, so go clean is mainly concerned with object files left by other tools or by manual invocations of go build.

https://manpages.debian.org/testing/golang-go/go-clean.1.en.html

每次尝试在您的计算机上构建时,您是否都清除了构建文件夹?

关于docker - 在 docker 容器中构建比在根系统上构建要慢得多,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60451089/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com