Skip to content

Commit e46ae5d

Browse files
committed
cap04-11-multi-stage
1 parent bd73110 commit e46ae5d

7 files changed

Lines changed: 93 additions & 9 deletions

File tree

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
FROM golang:1.24-alpine AS builder
2+
3+
WORKDIR /app
4+
5+
COPY . .
6+
RUN --mount=type=cache,target=/go/cache,id=go-mod \
7+
go mod tidy
8+
9+
RUN go build -o server .
10+
11+
FROM alpine:3.20 AS xpto
12+
13+
WORKDIR /app
14+
15+
RUN sleep 5
16+
RUN echo "full cycle" > /app/fullcycle.txt
17+
18+
FROM scratch
19+
20+
COPY --from=builder /app/server /server
21+
COPY --from=xpto /app/fullcycle.txt /fullcycle.txt
22+
EXPOSE 8000
23+
24+
CMD ["/server"]
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
group "default" {
2+
targets = ["golang-app-prod"]
3+
}
4+
5+
target "golang-app-prod" {
6+
context = "."
7+
dockerfile = "Dockerfile"
8+
tags = ["golang-app:latest"]
9+
}
10+
11+
target "golang-app-ci" {
12+
context = "."
13+
dockerfile = "Dockerfile"
14+
tags = ["golang-app:ci"]
15+
target = "builder"
16+
}

src/multi-stage/golang-app/go.mod

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
module golang-app
2+
3+
go 1.24.1
4+
5+
require github.com/gorilla/mux v1.8.1

src/multi-stage/golang-app/go.sum

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
github.com/gorilla/mux v1.8.1 h1:TuBL49tXwgrFYWhqrNgrUNEY92u81SPhu7sTdzQEiWY=
2+
github.com/gorilla/mux v1.8.1/go.mod h1:AKf9I4AEqPTmMytcMc0KkNouC66V3BtZ4qD5fmWSiMQ=

src/multi-stage/golang-app/main.go

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
package main
2+
3+
import (
4+
"fmt"
5+
"log"
6+
"net/http"
7+
8+
"github.com/gorilla/mux"
9+
)
10+
11+
func main() {
12+
r := mux.NewRouter()
13+
14+
r.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
15+
fmt.Fprintf(w, "Hello from Golang server!")
16+
})
17+
18+
r.HandleFunc("/health", func(w http.ResponseWriter, r *http.Request) {
19+
fmt.Fprintf(w, "OK")
20+
})
21+
22+
log.Println("Server is running on port 8000")
23+
log.Fatal(http.ListenAndServe(":8000", r))
24+
}
Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@ WORKDIR /home/node/app
88

99
RUN --mount=type=bind,source=package.json,target=package.json \
1010
--mount=type=bind,source=package-lock.json,target=package-lock.json \
11-
--mount=type=cache,target=/home/node/.npm \
12-
npm ci
11+
--mount=type=cache,target=/home/node/.npm,uid=1000,gid=1000,id=npm-cache \
12+
npm ci
1313

1414
COPY --chown=node:node . .
1515

@@ -25,14 +25,11 @@ RUN mkdir /home/node/app
2525

2626
WORKDIR /home/node/app
2727

28-
RUN --mount=type=bind,source=package.json,target=package.json \
29-
--mount=type=bind,source=package-lock.json,target=package-lock.json \
30-
--mount=type=cache,target=/home/node/.npm \
31-
npm ci --only=production
32-
33-
COPY . .
28+
COPY --from=ci --chown=node:node /home/node/app .
3429
RUN npm run build
3530

31+
RUN --mount=type=cache,target=/home/node/.npm,uid=1000,gid=1000,id=npm-cache \
32+
npm ci --only=production
3633

3734
FROM node:23.0.0-slim AS production
3835

@@ -50,4 +47,4 @@ COPY --chown=node:node --from=builder /home/node/app/package.json ./
5047

5148
EXPOSE 3000
5249

53-
CMD [ "npm", "run", "start:prod" ]
50+
CMD [ "node", "dist/main.js" ]
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
group "default" {
2+
targets = [ "nestjs-prod" ]
3+
}
4+
5+
target "nestjs-prod" {
6+
context = "./nestjs-project"
7+
dockerfile = "../Dockerfile"
8+
tags = ["nestjs:latest"]
9+
}
10+
11+
target "nestjs-ci" {
12+
context = "./nestjs-project"
13+
dockerfile = "../Dockerfile"
14+
tags = ["nestjs:ci"]
15+
target = "ci"
16+
}

0 commit comments

Comments
 (0)