Sobes.tech
Middle

Docker сүрөттөрүн оптималдаштыруу үчүн көп баскычтуу (multistage) курулушту кантип колдонуп жатасыз?

sobes.tech AI

AIден жооп

Көп баскычтуу куруу Dockerfile ичинде бир нече этаптарды (layers) колдонууга мүмкүндүк берет, анда ар бир этап өзүнүн милдетин аткарат. Бир этаптын жыйынтыгы (мисалы, түзүлгөн артефакт) кийинки этапка өткөрүлөт, бирок мурдагы этаптардын аралык катмары финалдык сүрөткө киргизилбейт.

Go колдонмолорун түзүү үчүн мисал:

# Түзүү этапы
FROM golang:1.20-alpine AS builder
WORKDIR /app
COPY . .
RUN go build -o /app/myapp

# Аягында этап
FROM alpine:latest
WORKDIR /app
COPY --from=builder /app/myapp /app/
CMD ["/app/myapp"]

Артыкчылыктары:

  • Сүрөттүн өлчөмүн кыскартуу: Аягында сүрөттө гана түзүлгөн колдонмо жана зарыл болгон көзкарандылыктар болот, куруу инструменттери, көз коду же аралык файлдар жок.
  • Жоопкерчиликтерди бөлүү: Түзүү/жүктөө логикасы жүктөө логикасынан бөлүнөт.
  • Коопсуздукту жогорулатуу: Керексиз инструменттер жана китепканалар алынып салынгандыктан, коркунучтуу аянтча кыскарган.
  • Түзүү ылдамдыгын жогорулатуу: Эптеп катмарынын кэшингинде кайра түзүү ылдамдайт.

Мисал катары, берилген Dockerfileда, биринчи катмары builder Go колдонмону түзүү үчүн колдонулат. Экинчи катмары, FROM alpine:latest менен башталат, жана ал биринчи катмарактан түзүлгөн колдонмону (COPY --from=builder /app/myapp /app/) таза базалык сүрөткө көчүрөт. Натыйжада, акыркы сүрөттөө гана ишке киргизүүчү файлды жана негизги операциялык системаны камтыйт, Go компилятору жана көз коду жок.

Бул ыкма, салттуу ыкмаларга салыштырмалуу, сүрөттүн өлчөмүн кыйла кыскартат, анткени түзүү жана ишке киргизүү бир контейнерде жүргүзүлөт.