Sobes.tech
Middle

რის შემთხვევებში გამოიყენება მრავალსაფეხურიანი (multi-stage) მშენებლობა?

sobes.tech AI

პასუხი AI-სგან

მრავალსაფეხურიანი ბილდინგი (multi-stage build) Docker-ში გამოიყენება შემდეგ შემთხვევებში:

  1. დასასრულის იმიჯის ზომის შემცირება: პირველი (ან შუამავლური) ფენაში განთავსებულია ინსტრუმენტები, რომლებიც საჭიროა კომპილაციის, ტესტების ან სხვა ბილდინგის ეტაპებისთვის (მაგალითად, კომპილატორი, ბილდინგის დამოკიდებულებები). მეორე (საბოლოო) ფენაში მხოლოდ საჭირო არტეფაქტები იკოპირებს (კომპილირებული კოდი, შესრულებადი ფაილები, დროის ბიბლიოთეკები). ეს ხელს უშლის არასაჭირო დამოკიდებულებების და ბილდინგის ინსტრუმენტების ჩართვას საბოლოო იმიჯში, რაც მნიშვნელოვნად ამცირებს მის ზომას.
  2. ბილდინგის და გაშვების ეტაპების განყოფილება: აშკარა განყოფილება ბილდინგის პროცესის გაგებას და დათვალიერებას ამარტივებს. შესაძლებელია ჰქონდეს ეტაპები კოდის ბილდინგისთვის, ტესტების გაშვებისთვის, ლინტინგისთვის და მხოლოდ ამის შემდეგ შექმნას საბოლოო იმიჯი განლაგებისთვის.
  3. უსაფრთხოების გაუმჯობესება: საბოლოო იმიჯი შეიცავს მინიმალურ საჭირო კომპონენტებს, რაც ამცირებს თავდასხმის ზონას. ბილდინგის ინსტრუმენტები და თავდაპირველი კოდი, რომელიც შესაძლოა სუსტობებს შეიცავდეს, არ შედის იმიჯში, რომელიც გამოიყენება პროდაქშენში.
  4. ბილდინგის სიჩქარის გაზრდა (ზოგჯერ): შუამავლური იმიჯები შეიძლება კეშირდეს, და ცვლილებების შემთხვევაში მხოლოდ ბოლო ეტაპებზე, არ არის საჭირო ყველა პროცესი თავიდან დაწყება.
  5. ბილდინგის პროცესის ერთიანობა: აპლიკაციის ბილდინგი და მისი Docker-იმიჯის შექმნა ხდება ავტომატიზირებული პროცესი ერთ Dockerfile-ის ფარგლებში, რაც ამარტივებს CI/CD პროცესებს.

Go-ისთვის გამოყენების მაგალითი:

# ბილდინგის ეტაპი
FROM golang:1.20-alpine AS builder
WORKDIR /app
COPY . .
# შესრულებადი ფაილის ბილდინგი
RUN go build -ldflags="-s -w" -o myapp .

# საბოლოო ეტაპი
FROM alpine:latest
WORKDIR /app
# მხოლოდ წინამორბედიდან შესრულებადი ფაილის კოპირება
COPY --from=builder /app/myapp .
# აპლიკაციის გაშვების ბრძანება
CMD ["./myapp"]