From 17d08bbc20749a265f9164465265546ede97e05d Mon Sep 17 00:00:00 2001 From: Ron Federman Date: Thu, 22 Feb 2024 16:59:23 +0200 Subject: [PATCH 1/4] Add caching for go modules in docker --- Dockerfile | 5 ++++- odiglet/Dockerfile | 10 +++++++--- odiglet/debug.Dockerfile | 10 +++++++--- 3 files changed, 18 insertions(+), 7 deletions(-) diff --git a/Dockerfile b/Dockerfile index 25b1821c6..a57583e6c 100644 --- a/Dockerfile +++ b/Dockerfile @@ -16,7 +16,10 @@ COPY $SERVICE_NAME/ . # Build for target architecture ARG TARGETARCH RUN go mod tidy -RUN CGO_ENABLED=0 GOARCH=$TARGETARCH go build -a -o /workspace/build/$SERVICE_NAME main.go +RUN --mount=type=cache,target=/root/.cache/go-build \ + --mount=type=cache,target=/go/pkg \ + CGO_ENABLED=0 GOARCH=$TARGETARCH \ + go build -a -o /workspace/build/$SERVICE_NAME main.go # Use distroless as minimal base image to package the manager binary # Refer to https://github.com/GoogleContainerTools/distroless for more details diff --git a/odiglet/Dockerfile b/odiglet/Dockerfile index fdf265dc9..33e7e56fe 100644 --- a/odiglet/Dockerfile +++ b/odiglet/Dockerfile @@ -23,14 +23,18 @@ COPY procdiscovery/ procdiscovery/ WORKDIR /go/src/github.com/keyval-dev/odigos/odiglet # Pre-copy/cache go.mod for pre-downloading dependencies and only redownloading COPY odiglet/go.mod odiglet/go.sum ./ -RUN go mod download +RUN go mod download && go mod verify # Copy rest of source code COPY odiglet/ . ARG TARGETARCH # Go does not call go generate on dependencies, so we need to do it manually -RUN cd $(go list -m -f '{{.Dir}}' "go.opentelemetry.io/auto") && make generate -RUN GOOS=linux GOARCH=$TARGETARCH go build -o odiglet cmd/main.go +RUN --mount=type=cache,target=/root/.cache/go-build \ + --mount=type=cache,target=/go/pkg \ + cd $(go list -m -f '{{.Dir}}' "go.opentelemetry.io/auto") && make generate +RUN --mount=type=cache,target=/root/.cache/go-build \ + --mount=type=cache,target=/go/pkg \ + GOOS=linux GOARCH=$TARGETARCH go build -o odiglet cmd/main.go WORKDIR /instrumentations diff --git a/odiglet/debug.Dockerfile b/odiglet/debug.Dockerfile index 6d1e83095..3ca2f6275 100644 --- a/odiglet/debug.Dockerfile +++ b/odiglet/debug.Dockerfile @@ -18,10 +18,14 @@ FROM keyval/odiglet-base:v1.0 as builder WORKDIR /go/src/github.com/keyval-dev/odigos COPY . . WORKDIR ./odiglet/ -RUN go mod download +RUN go mod download && go mod verify # Go does not call go generate on dependencies, so we need to do it manually -RUN cd $(go list -m -f '{{.Dir}}' "go.opentelemetry.io/auto") && make generate -RUN GOOS=linux go build -gcflags "all=-N -l" -o odiglet cmd/main.go +RUN --mount=type=cache,target=/root/.cache/go-build \ + --mount=type=cache,target=/go/pkg \ + cd $(go list -m -f '{{.Dir}}' "go.opentelemetry.io/auto") && make generate +RUN --mount=type=cache,target=/root/.cache/go-build \ + --mount=type=cache,target=/go/pkg \ + GOOS=linux go build -gcflags "all=-N -l" -o odiglet cmd/main.go # Install delve RUN go install github.com/go-delve/delve/cmd/dlv@latest From 37d40b19c7d587a0678d783b538ca53b77e16058 Mon Sep 17 00:00:00 2001 From: Ron Federman Date: Thu, 22 Feb 2024 17:16:08 +0200 Subject: [PATCH 2/4] Use bash explictly for make generate --- odiglet/Dockerfile | 2 +- odiglet/debug.Dockerfile | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/odiglet/Dockerfile b/odiglet/Dockerfile index 33e7e56fe..478b4eaeb 100644 --- a/odiglet/Dockerfile +++ b/odiglet/Dockerfile @@ -31,7 +31,7 @@ ARG TARGETARCH # Go does not call go generate on dependencies, so we need to do it manually RUN --mount=type=cache,target=/root/.cache/go-build \ --mount=type=cache,target=/go/pkg \ - cd $(go list -m -f '{{.Dir}}' "go.opentelemetry.io/auto") && make generate + bash -c 'cd $(go list -m -f "{{.Dir}}" "go.opentelemetry.io/auto") && make generate' RUN --mount=type=cache,target=/root/.cache/go-build \ --mount=type=cache,target=/go/pkg \ GOOS=linux GOARCH=$TARGETARCH go build -o odiglet cmd/main.go diff --git a/odiglet/debug.Dockerfile b/odiglet/debug.Dockerfile index 3ca2f6275..c49f88312 100644 --- a/odiglet/debug.Dockerfile +++ b/odiglet/debug.Dockerfile @@ -22,7 +22,7 @@ RUN go mod download && go mod verify # Go does not call go generate on dependencies, so we need to do it manually RUN --mount=type=cache,target=/root/.cache/go-build \ --mount=type=cache,target=/go/pkg \ - cd $(go list -m -f '{{.Dir}}' "go.opentelemetry.io/auto") && make generate + bash -c 'cd $(go list -m -f "{{.Dir}}" "go.opentelemetry.io/auto") && make generate' RUN --mount=type=cache,target=/root/.cache/go-build \ --mount=type=cache,target=/go/pkg \ GOOS=linux go build -gcflags "all=-N -l" -o odiglet cmd/main.go From 8f78db7a4633e66dfe8373e88e2eb8a88f657574 Mon Sep 17 00:00:00 2001 From: Ron Federman Date: Thu, 22 Feb 2024 22:43:30 +0200 Subject: [PATCH 3/4] fix --- Dockerfile | 3 ++- odiglet/Dockerfile | 9 +++++---- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/Dockerfile b/Dockerfile index a57583e6c..ff0be9703 100644 --- a/Dockerfile +++ b/Dockerfile @@ -10,7 +10,8 @@ WORKDIR /workspace/$SERVICE_NAME RUN mkdir -p /workspace/build # Pre-copy/cache go.mod for pre-downloading dependencies and only redownloading COPY $SERVICE_NAME/go.mod $SERVICE_NAME/go.sum ./ -RUN go mod download && go mod verify +RUN --mount=type=cache,target=/go/pkg \ + go mod download && go mod verify # Copy rest of source code COPY $SERVICE_NAME/ . # Build for target architecture diff --git a/odiglet/Dockerfile b/odiglet/Dockerfile index 478b4eaeb..c774caa58 100644 --- a/odiglet/Dockerfile +++ b/odiglet/Dockerfile @@ -22,16 +22,17 @@ COPY common/ common/ COPY procdiscovery/ procdiscovery/ WORKDIR /go/src/github.com/keyval-dev/odigos/odiglet # Pre-copy/cache go.mod for pre-downloading dependencies and only redownloading +# them in subsequent builds if they change COPY odiglet/go.mod odiglet/go.sum ./ -RUN go mod download && go mod verify +RUN --mount=type=cache,target=/go/pkg \ + go mod download && go mod verify # Copy rest of source code COPY odiglet/ . ARG TARGETARCH # Go does not call go generate on dependencies, so we need to do it manually -RUN --mount=type=cache,target=/root/.cache/go-build \ - --mount=type=cache,target=/go/pkg \ - bash -c 'cd $(go list -m -f "{{.Dir}}" "go.opentelemetry.io/auto") && make generate' +RUN --mount=type=cache,target=/go/pkg \ + cd $(go list -m -f '{{.Dir}}' "go.opentelemetry.io/auto") && make generate RUN --mount=type=cache,target=/root/.cache/go-build \ --mount=type=cache,target=/go/pkg \ GOOS=linux GOARCH=$TARGETARCH go build -o odiglet cmd/main.go From fea6fe11a242a06773b13d2ef8e913e3b6cc67b1 Mon Sep 17 00:00:00 2001 From: Ron Federman Date: Sun, 25 Feb 2024 12:52:36 +0200 Subject: [PATCH 4/4] Add caching to debug Dockerfile --- odiglet/debug.Dockerfile | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/odiglet/debug.Dockerfile b/odiglet/debug.Dockerfile index c49f88312..6806b1831 100644 --- a/odiglet/debug.Dockerfile +++ b/odiglet/debug.Dockerfile @@ -18,7 +18,8 @@ FROM keyval/odiglet-base:v1.0 as builder WORKDIR /go/src/github.com/keyval-dev/odigos COPY . . WORKDIR ./odiglet/ -RUN go mod download && go mod verify +RUN --mount=type=cache,target=/go/pkg \ + go mod download && go mod verify # Go does not call go generate on dependencies, so we need to do it manually RUN --mount=type=cache,target=/root/.cache/go-build \ --mount=type=cache,target=/go/pkg \